试图输入存储到与下面的代码串的阵列:
#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”)没有提示2弦,通过输入“高清”,所以进行。其次是2多个字符串。请注意,字符串“JKL”不打印。
请告诉我,我在这些2案件很想念?
谢谢。
在第一种情况下,你要定义一个指针数组:
char *string[noOfStrings];
然而,这些指针不会被初始化。当您然后尝试使用scanf
,取消引用这些无效的指针。这样做调用undefined behavior,在这种情况下会导致系统崩溃。
你的第二个情况下,通过使用大到足以容纳你的字符串输入字符的二维数组修复此。但是你因为你的scanf
格式的卡住:
scanf("%s\n",string[i]);
在格式字符串中的\n
匹配任意数量的空白字符,所以函数不会返回,直到你进入一个非空白字符。您可以通过格式字符串删除\n
解决这个问题。
scanf("%s",string[i]);