存储串与scanf函数的字符串数组

问题描述 投票:2回答:1

试图输入存储到与下面的代码串的阵列:

#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案件很想念?

谢谢。

c string multidimensional-array scanf
1个回答
2
投票

在第一种情况下,你要定义一个指针数组:

char *string[noOfStrings];

然而,这些指针不会被初始化。当您然后尝试使用scanf,取消引用这些无效的指针。这样做调用undefined behavior,在这种情况下会导致系统崩溃。

你的第二个情况下,通过使用大到足以容纳你的字符串输入字符的二维数组修复此。但是你因为你的scanf格式的卡住:

scanf("%s\n",string[i]);

在格式字符串中的\n匹配任意数量的空白字符,所以函数不会返回,直到你进入一个非空白字符。您可以通过格式字符串删除\n解决这个问题。

scanf("%s",string[i]);
© www.soinside.com 2019 - 2024. All rights reserved.