当我输入test \n test
时,尝试使用此代码编写
FILE *f = fopen(file, "w+");
fflush(f);
if (f==NULL) {
//perror(f);
return 0;
}
else{
int i = fprintf(f, "%s", text);
if (i>0) {
fclose(f);
return 1;
}
else{
fclose(f);
return 0;
}
}
然后使用此
阅读FILE *f = fopen(file, "r");
static char c[100000];
const char *d;
if (f!=NULL) {
if (fgets(c, 100000, f) !=NULL){
d = c;
}
else{
d = "No text";
}
}
else{
/*
char *ff = f;
perror(ff);
*/
d = "File not found";
}
fclose(f);
return d;
它只会读取和写入test
,而不是test
,新行,test
。为什么这不起作用?
答案 0 :(得分:5)
fgets()
函数会读取它遇到的第一个换行符,或者当它用尽空间来存储结果时,或者当它获得EOF时停止(因此没有更多数据可供读取)。
随后对fgets()
的调用将在第一个换行符后收集信息。
如果您想一次阅读全部内容,请考虑fread()
。 OTOH,你也必须解决这些问题(特别是:(1)你可能要求最多1000个字节,但只能回20,所以你的代码必须正确处理短读;和(2)与fread()
等不同,fgets()
不会为您终止输入字符串。
在撰写时,fwrite()
将是fread()
的逻辑补充,但您可以完全继续使用fprintf()
和朋友,或fputs()
,或{ {1}}或任何其他标准I / O编写功能。对于'如果你使用这些函数编写,你必须阅读这些其他函数',没有正式的约束。这取决于你写作和阅读的性质,但你通常可以自由地转换,看起来最方便。
答案 1 :(得分:3)
http://www.cplusplus.com/reference/cstdio/fgets/
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。