0

我有一个可以打开、修改和关闭的二进制文件。然后我printf到控制台。

这一切都很好,但我刚刚意识到它将我打印到控制台的任何内容附加到二进制文件的末尾,无论文件是打开还是关闭都没有区别。

同样的事情发生在fprintf.

这里发生了什么?关于文件 I/O,我有什么不明白的地方吗?

更新:这是代码:

FILE *out = fopen("test","wb+");
fseek(out,0,SEEK_END);
fwrite("test",1,10,out);
fwrite("test",1,10,out);
fwrite("test",1,10,out);
int pos = ftell(out);
fwrite(&pos,sizeof(int),1,out);
fclose(out);
fprintf(stdout,"%s","hello");
4

1 回答 1

3

调用fwrite()不正确,因为它们指示从 5 个字符数组fwrite()中写入10字符(字符串文字附加了一个隐式空字符)。这将超出数组的末端进行访问,从而导致未定义的行为,并且可能是导致奇怪行为的原因。

更正fwrite()调用:

fwrite("test", 1, 4, out);

根据评论,如果必须有 10 个字符,则声明一个数组:

char msg[10] = "test"; /* Unspecified elements will be null. */

fwrite(msg, 1, sizeof(msg), out);
于 2012-10-09T09:41:00.790 回答