Scanf用于多个用户输入

时间:2015-09-18 18:14:55

标签: c segmentation-fault scanf stdin

道歉我对C非常缺乏经验。我有以下代码:

char * a[BUF_SIZE]; 

scanf("%d", numberOf);
do {
    a[i] = (char *)malloc(MAX_LINE_LEN + 1);
    scanf("%s", a[i]);
    ++i;
} while(i < numberOf);

这个想法很简单,使用scanf从stdin读取两个输入,第一个是单个int,后跟一些字符串数组。 Scanf在两种情况下都独立工作,例如scanf(“%d”,numberOf)将存储一个数字,scanf(“%s”,a [i])将一组字符串存储到数组中。但是,在读取一组字符串时,首先将整数读入numberOf会导致段错误。我的问题是为什么?我知道使用scanf通常是不好的做法,但是我没有看到如何从stdin中读取多个输入会导致生成的代码中出现段错误。非常感谢!

2 个答案:

答案 0 :(得分:5)

从代码中看,numberOf似乎是int。使用scanf时,您希望向其传递指针,因此将scanf("%d", numberOf);更改为scanf("%d", &numberOf);

scanf做的是取用户输入并将其放入第二个参数指定的内存地址。当您提供int作为第二个参数时,scanf会尝试将用户输入放入它可能不拥有的内存地址(由int指定),从而导致seg-fault。

答案 1 :(得分:4)

&您遗失scanf("%d", numberOf);运算符&numberOf