问题描述
如何使用 fwrite 写入带有 char* 的文件?如果我想在文件末尾附加一个 char* 并在后面加上一个换行符,这样的事情是否正确?如果你有一个像这样的变量:
print(df)
value_1 Value_2
0 10 20
会不会是:
char* c = "some string";
我对第二个 fwrite 语句有点困惑。是 sizeof(char*) 还是 sizeof(char)?我也应该有 sizeof(c) 还是不正确?任何建议将不胜感激,谢谢。
解决方法
第一次调用 fwrite
是错误的。
fwrite(c,sizeof(char*),sizeof(c),fp);
应该写成例如
fwrite(c,sizeof( char ),strlen( c ),fp);
即字符串文字 "some string"
不包括其终止零字符写入文件。
至于这个电话
fwrite("\n",sizeof(char),1,fp);
然后在文件 fp 中写入一个字符 '\n'
。
注意:字符串文字 "\n"
在内部表示为两个元素 { '\n','\0' }
的字符数组。
函数声明如下
size_t fwrite(const void * restrict ptr,size_t size,size_t nmemb,FILE * restrict stream);
并根据 C 标准(7.21.8.2 fwrite 函数)
2 fwrite 函数从 ptr 指向的数组中写入到 大小由 size 指定的 nmemb 元素,指向指向的流 到流。对于每个对象,都会对 fputc 进行 size 调用 函数,从无符号字符数组中获取值(按顺序) 完全覆盖对象。文件位置指示符 流(如果已定义)按字符数前进 成功写入。如果发生错误,则结果值 流的文件位置指示符不确定。
,此处的其他答案和评论会告诉您您发布的代码有什么问题,但更好的解决方案是使用 fputs
,它专门用于写出以空字符结尾的字符串:
const char* c = "some string";
FILE *fp = fopen("file.txt","ab");
fputs (c,fp);
fputs ("\n",fp);
fclose(fp);