-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()、ファイルのサイズを取得するか、OS の API が提供するより快適な関数を取得します。)

于 2012-10-12T16:19:48.873 に答える
4

sizeofデータ型のサイズを計算するために使用される単項演算子です。テキストファイルのサイズを検索/比較するために使用することはできません。

于 2012-10-12T16:21:32.267 に答える
3

ファイルのサイズを取得するには、statを使用する必要があります。

于 2012-10-12T16:21:46.750 に答える