【问题标题】:C Program with fscanf() mysteriously stops working带有 fscanf() 的 C 程序神秘地停止工作
【发布时间】:2012-11-13 22:10:00
【问题描述】:

我有一个名为 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正在努力寻找解决问题的办法……”

有人知道这是为什么吗?

【问题讨论】:

  • 打开你的编译器警告,他们会告诉你 onetwo 未初始化。将-Wall 与 gcc 一起使用。另外,int main.

标签: c windows mingw


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    尝试使用字符数组。

    【讨论】:

      【解决方案3】:

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

      【讨论】: