对文件进行追加写操作,将字符数组中的字符串写入文件。每执行程序一次,追加写文件一次。遇到问题如下所述。
代码片段如下:
FILE *fp=NULL;
char tmp[512];char buf[1024*5]={0};
if((fp=fopen(filename,"a+"))==NULL){//追加读写打开文件
printf("Open data file failed!\n");
exit(0);
}
buf的赋值
fwrite(&buf,sizeof(buf),1,fp);
问题:当利用上述代码每执行一次程序,对文件追加写一次,文件写入结果如下图所示:
出现这个问题是buf缓冲区申请的大,实际数据占用的少,写入文件时没有判断实际数据大小。将buf大小用strlen获取所存字符串的长度,而不是sizeof,sizeof获取的是数组大小
fwrite(&buf,strlen(buf),1,fp);
重新执行程序,查看文件,格式正确。

本文解决了一个使用fwrite函数写入文件时未正确判断实际数据大小的问题。通过使用strlen获取字符串的实际长度而非sizeof获取数组大小,确保了每次程序执行时都能正确地追加数据到文件。
4055

被折叠的 条评论
为什么被折叠?



