我目前正在编写一个简单的小型一次性垫程序。我希望它在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))
为什么程序仍然会忽略它?
答案 0 :(得分:10)
sizeof
不会返回文件的大小。 sizeof
用于检查类型在内存中占用的字节数。
如果您想了解有关获取文件大小的更多信息,请查看this帖子。
答案 1 :(得分:5)
sizeof
是一个编译时运算符,以字节为单位产生其操作数的数据类型的大小。你确定这就是你想要做的吗?我非常怀疑,因为您似乎想要比较文件大小。 (fopen()
,fseek()
结束,ftell()
以获取文件的大小,或者您的操作系统API为您提供的更舒适的功能。)
答案 2 :(得分:4)
sizeof
是一个用于计算数据类型大小的一元运算符。您无法使用它来查找/比较文本文件的大小。
答案 3 :(得分:3)
您需要使用stat来获取文件的大小。