1
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. 我因为告诉某人他们需要 malloc 指针*而被起诉(但这通常似乎可以解决问题,例如将其设为数组)
  2. 我输入的命令是“魔法”——5 个字符——所以不应该有任何疯狂的堆栈溢出。
  3. 我在 Mac OS X 10.6 上运行最新版本的 xCode(非 OS4)和标准 gcc
  4. 这就是我编译程序的方式:gcc --std=c99 -W sfs.c

只是想弄清楚发生了什么。因为这是一个学校项目,我永远不会再看到了,我只会编写一些菜鸟的工作,这会让我的老板哭泣 :) 但之后我很想弄清楚为什么会发生这种情况,而不仅仅是让一些修复它,如果有一些修复它为什么该修复工作。

4

2 回答 2

11

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

char command[somearraysize];
于 2010-04-12T22:19:25.653 回答
11
 char command[100];
 scanf("%s",command);

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

于 2010-04-12T22:19:37.167 回答