C程序与fscanf()神秘地停止工作

时间:2012-11-13 22:10:00

标签: c windows mingw

我有一个名为test.c的程序,以及一个名为test.in的输入文件。我正在尝试从输入文件中读取两个字符串并将它们输出到控制台。我正在运行Windows 7,但我正在使用gcc编译MinGW。

这是我的文件test.c:

#include <stdio.h>
main() {

    FILE *fin = fopen ("test.in", "r");
    char  *one, *two;

    fscanf(fin, "%s %s", one, two);
    printf("%s\n%s", one, two);

    fclose(fin);
    return 0;
}

这是我的文件test.in:

ONE
TWO

我去MinGW,运行“gcc -o test.exe test.c”,一切都编译得很好,但是当我运行test.exe时,弹出窗口出现并说“test.exe已停止工作.Windows正试图找到问题的解决方案......“

有谁知道这是为什么?

3 个答案:

答案 0 :(得分:5)

fscanf正在写入你传递给它的未初始化的指针。这种影响尚未定义,但可能会发生崩溃。您需要在调用之前分配您的char数组:

#define MAX_LEN (32) /* change this as required */
char one[MAX_LEN];
char two[MAX_LEN];
fscanf(fin, "%s %s", one, two);

答案 1 :(得分:1)

你有指向字符的指针,但你没有分配任何内存来存储字符串。

尝试使用字符数组。

答案 2 :(得分:1)

而不是char* one必须有char one[100]或其他一些数字。用户不得输入超过one大小的字母(字符串终止符减1)。目前代码正在写入内存中的一些随机位置。在这种随机的情况下,任何事情都可能发生。