fprintf()用于循环打印文件中的^ @字符

2020-02-15 c
int main(){
    int N = 1296;
    int i=0;

    FILE *f;

    f = fopen("filename.txt", "w");


    for (i=0; i<N; i++) fprintf(f, "Array_A[%d], ", i);
    for (i=0; i<N; i++) fprintf(f, "Array_B[%d], ", i);

    fclose(f);
}

输出文件显示如下:
Array_A [0],Array_A [1],Array_A [3] ...等。 但是经过一定次数的重复后,它会在文件中转储一系列“ ^ @ ”字符,而不是要打印的实际内容。之后,它再次继续打印正确的内容。不知道是什么原因造成的。
PS:我正在使用vim查看输出文件。

解决方案:问题是由于fprintf()缓冲区损坏。在继续下一条指令之前, printf()fprintf()并不总是完成打印。因此,缓冲区内容已损坏。为了解决这个问题,我以以下方式使用了fflush()fflush()强制fprintf()完成打印并清空缓冲区,然后再继续执行下一条指令。

int main(){
    int N = 1296;
    int i=0;

    FILE *f;

    f = fopen("filename.txt", "w");


    for (i=0; i<N; i++) fprintf(f, "Array_A[%d], ", i);
    fflush(f);    // flushes print buffer

    for (i=0; i<N; i++) fprintf(f, "Array_B[%d], ", i);
    fflush(f);    // flushes print buffer

    fclose(f);
}

Answers

Related