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"以强制打开二进制文件的模式打开它(在b符合 POSIX 的系统上应该忽略 for 二进制文件)。

于 2012-05-21T22:39:13.817 回答
3

你的定义sig不正确。如果你想要一个字符数组,你必须删除星号。您已经定义了一个字符指针数组。它应该看起来像:

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