【发布时间】:2019-07-02 01:12:00
【问题描述】:
尝试使用以下代码将输入存储到字符串数组中:
#include <stdio.h>
#include <string.h>
int main()
{
int noOfStrings;
printf("Enter no of strings: ");
scanf("%d", &noOfStrings);
char *string[noOfStrings];
for(int i=0; i<noOfStrings; i++){
printf("\nEnter string %d: ", i);
scanf("%s\n",string[i]);
}
return 0;
}
-----------------------------------------------------------------------------
Console:
Enter no of strings: 3
Enter string 0: abc
Enter string 1: def
Enter string 2: ghi
Segmentation fault (core dumped)
...Program finished with exit code 139
Press ENTER to exit console.
-----------------------------------------------------------------------------
我无法弄清楚为什么会失败。
我还尝试了以下固定大小数组的代码。
#include <stdio.h>
#include <string.h>
int main()
{
int noOfStrings;
printf("Enter no of strings: ");
scanf("%d", &noOfStrings);
char string[noOfStrings][5];
for(int i=0; i<noOfStrings; i++){
printf("\nEnter string %d: ", i);
scanf("%s\n",string[i]);
}
printf("\nPrinting Stored Strings");
for(int i=0; i<noOfStrings; i++){
printf("\nEnter string %d: ", i);
printf("%s\n",string[i]);
}
return 0;
}
-----------------------------------------------------------------------------
Console:
Enter no of strings: 3
Enter string 0: abc
def
Enter string 1: ghi
Enter string 2: jkl
Printing Stored Strings
Enter string 0: abc
Enter string 1: def
Enter string 2: ghi
...Program finished with exit code 0
Press ENTER to exit console.
输入第一个字符串('abc')后,没有提示输入第二个字符串,所以继续输入'def'。其次是另外 2 个字符串。请注意,字符串 'jkl' 没有打印出来。
请告诉我在这两种情况下我缺少什么?
谢谢。
【问题讨论】:
-
在第一种情况下,您声明指针数组,并且在取消引用之前需要为每个指针分配内存。
-
@xing 我尝试在两种情况下都删除 \n 我得到以下输出:案例 1- 输入字符串数量:3 输入字符串 0:abc def 输入字符串 1:ghi 输入字符串 2:jkl打印存储的字符串 输入字符串 0:abc 输入字符串 1:def 输入字符串 2:ghi 案例 2- 输入字符串数量:3 输入字符串 0:abc def 输入字符串 1:ghi 输入字符串 2:jkl 打印存储的字符串 输入字符串 0: abc 输入字符串 1:def 输入字符串 2:ghi
-
每次您使用
*scanf()读取用户输入并且不检查返回值时,都依赖于用户不调用程序的未定义行为。不要那样做。 -
@DevSolar 明白了:)
-
@xing 我这边的错误建议更改解决了这个问题。谢谢
标签: c string multidimensional-array scanf