Scanf 用于多个用户输入
Scanf for multiple user inputs
抱歉,我对 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 读取多个输入如何导致结果代码中出现段错误。非常感谢!
从代码看来,numberOf
是一个 int
。使用scanf
时,你想传递一个指针,所以将scanf("%d", numberOf);
改为scanf("%d", &numberOf);
scanf
所做的是获取用户输入并将其放入第二个参数指定的内存地址。当您提供 int
作为第二个参数时,scanf
会尝试将用户输入放入它可能不拥有的内存地址(由 int
指定),从而导致段错误。
您在 scanf("%d", numberOf);
中缺少 &
运算符,将其设为 &numberOf
抱歉,我对 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 读取多个输入如何导致结果代码中出现段错误。非常感谢!
从代码看来,numberOf
是一个 int
。使用scanf
时,你想传递一个指针,所以将scanf("%d", numberOf);
改为scanf("%d", &numberOf);
scanf
所做的是获取用户输入并将其放入第二个参数指定的内存地址。当您提供 int
作为第二个参数时,scanf
会尝试将用户输入放入它可能不拥有的内存地址(由 int
指定),从而导致段错误。
您在 scanf("%d", numberOf);
中缺少 &
运算符,将其设为 &numberOf