scanf段错误和循环中的各种其他异常

时间:2010-04-12 22:16:32

标签: c segmentation-fault scanf

while(1){
    //Command prompt
    char *command;
    printf("%s>",current_working_directory);
    scanf("%s",command);<--seg faults after input has been received.
    printf("\ncommand:%s\n",command);
}

我遇到了一些不同的错误,它们看起来并不真实(除了此时的段错误)。这个代码大约10分钟前工作正常,然后它无限循环printf命令,现在它在上面提到的行上出现故障。我唯一改变的是scanf(">%s",command);到现在的状态。如果我将命令变量更改为数组,它就可以工作;显然这是因为存储是为它预留的。

  1. 我因告诉某人他们需要使用指针*而被起诉(但这通常似乎可以解决问题,例如将其作为数组)
  2. 我输入的命令是“魔法” - 5个字符 - 所以不应该有任何疯狂的堆栈溢出。
  3. 我在Mac OS X 10.6上运行最新版本的xCode(非OS4)和标准gcc
  4. 这是我编译程序的方式:gcc --std=c99 -W sfs.c
  5. 试图弄清楚发生了什么。由于这是一个学校项目,我永远不会再看到,我只会编写一些noob工​​作,这会让我的老板哭泣:)但是之后我想知道为什么这种情况正在发生,而不只是为它做一些修复,如果有一些修复它为什么修复工作。

2 个答案:

答案 0 :(得分:11)

scanf尝试将其读取的数据存储到参数中(command)。该变量尚未初始化为指向有效内存。因此,为其分配内存的malloc将使其有效。它也可以在堆栈中声明:

char command[somearraysize];

答案 1 :(得分:11)

 char command[100];
 scanf("%s",command);

至于为什么这是必要的,我建议你读一本关于C的书,比如The C Programming Language