【发布时间】:2018-03-12 10:25:22
【问题描述】:
我最近在我的 c 程序中遇到了非常奇怪的行为。我删除了大部分代码,只是为了找出问题发生在你们身上。
程序在当前状态下的目的是从 txt 文件中读取作业并将内容打印到屏幕上。这里是:
#include <stdio.h>
int main(){
char* user;
char process;
int arrival;
int duration;
scanf("%*[^\n]"); //skipping header in the file.
while(!feof(stdin))
{
scanf("%s\t%c\t%d\t%d\n", user, &process, &arrival, &duration);
printf("%s\t%c\t%d\t%d\n", user, process, arrival, duration);
}
int x[5]; //<----- Causing the weird behaviour
}
我输入的文件是:
User Process Arrival Duration
Jim A 2 5
Mary B 2 3
Sue D 5 5
Mary C 6 2
我遇到的问题是每当我声明 int x 数组时,无论是在代码的底部还是顶部,while 循环都会进入无限循环或程序段错误。
它将进入无限循环或段错误,具体取决于我声明数组的大小。例如,如果我声明数组的大小为 5,它会进入无限循环。但是,如果我声明数组的大小为 2,则会出现段错误。
我正在通过运行编译我的程序:
gcc -o myprog myprog.c
我通过运行管道文件:
cat jobs.txt | ./myprog
另外值得注意的是,程序在没有 int x 数组声明的情况下运行良好。
我完全不知道可能是什么问题,有什么想法吗?
【问题讨论】:
-
您永远不会初始化
user以指向有效的内存位置 ->scanf(在while循环内)调用 未定义的行为 -
你会想看看Why is while ( !feof (file) ) always wrong?。请改用
scanf的返回值。 -
int x[2];for 2,3,4 导致段错误。和x[5]导致奇怪的行为
标签: c arrays segmentation-fault scanf infinite-loop