如何使用fwrite到带有char*的文件?如果我想在文件末尾添加一个字符*,后面加一行换行符,这样的方法对吗?如果你有一个变量,比如:
char* c = "some string";
会是吗
FILE *fp = fopen("file.txt", "ab");
fwrite(c, sizeof(char*), sizeof(c), fp);
fwrite("n", sizeof(char), 1, fp);
close(fp);
我对第二个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.中写入一个字符CCD_ 3
注意:字符串文字"n"
在内部表示为两个元素{ 'n', ' ' }
的字符数组。
函数的声明方式类似
size_t fwrite(const void * restrict ptr,
size_t size,
size_t nmemb,
FILE * restrict stream);
并根据C标准(7.21.8.2转发功能(
2 fwrite函数从ptr指向的数组中写入nmmb元素,其大小由大小指定,指向指向的流到按流。对于每个对象,都会对fputc进行size调用函数,从无符号字符数组中获取值(按顺序(正好覆盖对象。的文件位置指示器流(如果已定义(按字符数前进成功写入。如果发生错误流的文件位置指示符不确定。
这里的其他答案和注释会告诉您发布的代码有什么问题,但更好的解决方案是使用fputs
,它专门设计用于写出以nul结尾的字符串:
const char* c = "some string";
FILE *fp = fopen("file.txt", "ab");
fputs (c, fp);
fputs ("n", fp);
fclose(fp);