gpt4 book ai didi

C写入错误: mcleanup

转载 作者:行者123 更新时间:2023-11-30 17:47:15 25 4
gpt4 key购买 nike

Codeblocks,C。我正在尝试使用 fwrite 将字符写入 .txt 文件。前几个字符被正确写入,但在它们之后的文件显示:_mcleanup: tos ov。我认为这可能是缓冲区过载。有什么想法吗?

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
FILE*p1;

p1=fopen("Tomi.txt","w+");

fseek(p1,0,SEEK_SET);

// fwrite("Toth Tamas",sizeof(char),30,p1);

while(a<10)
{
fwrite("Toth Tamas",sizeof("Toth Tamas"),1,p1);

a++;

}

return 0;
}

最佳答案

如果我在 FILE *p1; 之后立即添加 int a = 0;,则程序的 while 循环版本将毫无怨言地进行编译,即使出现最多警告,并且即使在 valgrind 下,在我的计算机上执行也没有错误。您希望在 fwrite 调用中使用 sizeof("Toth Tamas") - 1 来防止 NUL 字节写入文件,也许应该有一个 \n 在“Tamas”之后,并查看我之前对其他小问题的评论,但该代码似乎基本上没问题。

但是,注释掉的行 //fwrite("Toth Tamas",sizeof(char),30,p1); 确实有一个错误:字符串常量 "Toth Tamas " 只有 11 个字节长(算上终止 NUL),但你要求 fwrite 写入 30 个字节,因此它将访问字符串末尾之外的 19 个字节,从而触发 undefined行为。在上下文中,人们会预期出现段错误或将垃圾写入文件。

“_mcleanup: tos ov”的长度为 17 个字节,因此如果这是可执行文件的只读数据段中的下一个字符串常量(的开头),则很可能会显示为写入的垃圾文件,我认为就是你所说的发生的事情。

关于C写入错误: mcleanup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com