-1

我目前正在编写一个简单的一次性小程序。我希望它在keyfile小于source文件时警告用户,但是当我运行它时,我的程序会忽略它。

/* Check if keyfile is the same size as, or bigger than the sourcefile */
if(sizeof keyfile < sizeof sourcefile)
{
printf("Source file is larger than keyfile.\n");
printf("This significantly reduces cryptographic strength.\n");
printf("Do you wish to continue? (Y/N)\n");
scanf("%c", &ans);
if(ans == 'n' || ans == 'N')
    {
    return (1);
    }
if(ans == 'y' || ans == 'Y')
    {
    printf("Proceeding with Encryption/Decryption.\n");
    }

我怀疑问题出在我的使用sizeof上,但我不知道还有其他选择吗?关于如何更改代码以使其正常工作的任何建议?

编辑:我已经尝试fstat尽我所能,但它仍然以同样的方式做出反应......这就是我所做的:

/* Get size of sourcefile. */
if((sourcefile = fopen(argv[1], "rb"))== NULL)
{
printf("Can't open source file.\n");
printf("Please enter a valid filename.\n");
printf("USAGE: OTP <source file> <output file> <keyfile>\n");
return (1);
}

fflush(sourcefile);
fstat(fileno(sourcefile), &statbuf);
fclose(sourcefile);

/* Get size of keyfile. */
if((keyfile = fopen(argv[3], "rb"))== NULL)
{
printf("Can't open keyfile.\n");
printf("Please enter a valid filename.\n"); 
printf("USAGE: OTP <source file> <output file> <keyfile>\n");
return(1);

fflush(keyfile);
fstat(fileno(keyfile), &keybuf);
fclose(keyfile);
}

并更改了 if 语句的第一行被忽略:

if((keybuf.st_size) < (statbuf.st_size))

为什么它仍然被程序忽略?

4

4 回答 4

10

sizeof不返回文件的大小。sizeof用于检查类型在内存中占用的字节数。

如果您想了解有关获取文件大小的更多信息,请查看这篇文章。

于 2012-10-12T16:20:24.563 回答
5

sizeof是一个编译时运算符,产生其操作数的数据类型的大小(以字节为单位)。你确定这就是你想在这里做的吗?我非常怀疑,因为您似乎想比较文件大小。(fopen()fseek()结束,ftell()获取文件的大小,或者您的操作系统 API 为您提供的任何更舒适的功能。)

于 2012-10-12T16:19:48.873 回答
4

sizeof是用于计算数据类型大小的一元运算符。您不能使用它来查找/比较文本文件的大小。

于 2012-10-12T16:21:32.267 回答
3

您需要使用stat来获取文件的大小。

于 2012-10-12T16:21:46.750 回答