当fprintf遇到\ n时,它会崩溃我的程序

时间:2017-03-25 20:28:57

标签: c printf

我正在尝试在.txt文件中生成报告,但当我的fprintf遇到\n时,它会崩溃。这是关于打开文件和崩溃的代码:

FILE *f;
f = fopen("estructuras.txt", "w");
fprintf(f, "");
printf("3"); //This is the last thing I see.
fprintf(f, "TEXT TO INPUT\n")
fclose(f);

1 个答案:

答案 0 :(得分:3)

问题是你没有检查文件是否打开。如果失败,它将返回NULL并且会对fprintf做坏事。

您的第一个fprintf(f, "");是无操作。打印空字符串不起作用,因此"工作" (虽然我怀疑这是否有保障)。 printf("3");执行stdout并且不受失败的fopen的影响。 fprintf(f, "TEXT TO INPUT\n")终于尝试打印到NULL和pukes。

必须检查所有系统调用。它们在出错时都有不同的返回值。 fopen返回NULL,错误位于errno。有fopen错误处理的方法很多,这里是我喜欢的方法,它为用户提供调试问题的信息。

#include <string.h>    // for strerror()
#include <errno.h>     // for errno
#include <stdio.h>
#include <stdlib.h>

int main(){
    // Put the filename in a variable so it can be used in the
    // error message without needing to be copied.
    char file[] = "estructuras.txt";

    FILE *fp = fopen(file, "w");
    if( fp == NULL ) {
        // Display the filename, what you were doing with it, and why it wouldn't open.
        fprintf(stderr, "Could not open '%s' for writing: %s\n", file, strerror(errno));
        exit(-1);
    }
}

strerror(errno)将数字errno错误代码转换为人类可读的字符串。文件名周围有引号,以防额外的空格偷偷进入。

因此,您会收到Could not open 'estructuras.txt': No such file or directory之类的错误。