正如标题所说,fread似乎只是读取前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
ħ 如该日志所示,文件中有254个字符,但只有64个字符被读取。
编辑:问题不在于fread,我不小心在零终结符中写入了文件。答案 0 :(得分:3)
目前尚不清楚这是否相关,但似乎存在一些问题:
char *sig[255];
fread(sig, 255, 255, sigD);
对fread
的调用与声明不一致。它应该是以下(你可能想要一个char数组而不是char的指针数组)。传递给fread的大小/ nitems信息不正确:
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"
模式打开它以强制打开二进制文件(对于符合POSIX的系统,应该忽略二进制文件的b
)。 / p>
答案 1 :(得分:3)
您对sig
的定义不正确。如果需要一组字符,则必须删除星号。您已经定义了一个字符指针数组。它应该看起来像:
char sig[255];