C读过去换行

Chr*_*nam 0 c printf newline char

例如,当我键入时,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后用它来读它

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;
Run Code Online (Sandbox Code Playgroud)

它只会读写test,而不是test新行test.为什么这不起作用?

Jon*_*ler 5

fgets()函数读取它遇到的第一个换行符,或者当它用尽空间来存储结果时,或者当它获得EOF时停止(因此没有更多数据可供读取).

随后的调用fgets()将在第一个换行符后收集信息.

如果你想一次阅读,请考虑fread().OTOH,你也必须解决这些问题(特别是:(1)你可能要求最多1000个字节,但只能回20,所以你的代码必须正确处理短读;和(2)fread()将不会为您终止输入字符串,不像fgets()等).

在编写时,fwrite()它将是逻辑上的补充fread(),但您可以很好地继续使用fprintf()和朋友fputs(),或者putc(),或者任何其他标准I/O编写函数.对于'如果你使用这些函数编写,你必须阅读这些其他函数',没有正式的约束.这取决于你写作和阅读的性质,但你通常可以自由地转换,看起来最方便.