C读过去换行

时间:2013-03-18 01:51:03

标签: c char newline printf

当我输入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。为什么这不起作用?

2 个答案:

答案 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)个字符或者到达换行符或文件结尾为止,以先发生者为准。