1

タイトルが示すように、freads は最初の 64 文字しか読み取っていないように見えます。関連コード:

FILE* sigD = fopen("signature", "r");
char *sig[255];
fread(sig, 255, 255, sigD);
close(sigD);    
fputs(sig, stdout);

コンソール出力:

user@PC:~$ ./a.out --has-sig 
;2F*S|tr;;E9;Yb=R6)!fcXhoX@RC`#NzLy<}w@T+uvH${3Et&9K&-0~%D{1
user@PC:~$ 
user@PC:~$ cat signature
;2F*S|tr;;E9;Yb=R6)!fcXhoX@RC`#NzLy<}w@T+uvH${3Et&9K&-0~%D{1N{7ry:-B9b:kGB=Gkk9V+Cc$8a&35W{15Q~#-+PMeqa;#cKA7Ew3G6P4smDdJWV2@>R!V#ki@(Xj<a,^B)qJ5D&bON//?%/!G)XA&m|8:1mVHmx{7nQoRJ%v{(K:;JtX2hOm/dhVm9mnuDMSbQX55ouVnmECbA`/`!?=Mh0Ab^@vk*K*HG5$omu6716/Loh1Ht

h そのログが示すように、ファイルには 254 文字ありますが、読み取られるのは 64 文字だけです。

編集: 問題は fread にはありませんでした。誤ってゼロターミネータをファイルに書き込んでしまいました。

4

2 に答える 2

3

これが関連しているかどうかは明らかではありませんが、いくつかの問題があるようです。

char *sig[255];
fread(sig, 255, 255, sigD);

への呼び出しがfread宣言と一致していません。おそらく次のようになるはずです(おそらく、charへのポインターの配列ではなく、charの配列が必要です)。また、 freadに渡されたサイズ/アイテム情報が正しくありませんでした:

char sig[255];
// initially I had this as 'sizeof(), 1' but I think for this file it would make
// more sense as the following (nitems=255):
fread(sig, 1, sizeof(sig), sigD);

"rb"また、それは問題ではありませんが、強制的にバイナリを開くモードで開いてみることもできます( bPOSIX 準拠システムでは for バイナリは無視されるはずです)。

于 2012-05-21T22:39:13.817 に答える
3

の定義sigが正しくありません。文字の配列が必要な場合は、アスタリスクを削除する必要があります。文字ポインターの配列を定義しました。次のようになります。

char sig[255];
于 2012-05-21T22:39:21.433 に答える