C中的二维数组字符

ran*_*jun 0 c c-strings

帮助我摆脱这个问题.我在ubuntu12.04上使用GCC.当我编写这个程序从键盘n获取5个字符串然后在屏幕上打印这些字符串.程序已编译但在执行期间它从键盘获取字符串但仅打印最后一个字符串.我写的程序如下:

void main()    
{  
    char names[10];  
    int i,j;

    for(i=0;i<5;i++)  
    {  
        printf(" Enter a name which you want to register\n");  
        scanf("%s",names);  
    }  
    for(i=0;i<5;i++)    
        printf(" the names you enter are %s\n", names);  

}
Run Code Online (Sandbox Code Playgroud)

MOH*_*MED 13

1)你可以用这种方式使用2D char数组

char names[5][100];
Run Code Online (Sandbox Code Playgroud)

2D数组中的每一行都是char数组,其大小为100

for(i=0;i<5;i++)  
{
    printf(" Enter a name which you want to register\n");  
    scanf("%99s",names[i]);
}
Run Code Online (Sandbox Code Playgroud)

2)你可以用这种方式使用指针数组

char *names[5];
Run Code Online (Sandbox Code Playgroud)

数组中的每个元素都是一个指向字符串(char数组)的指针.在调用之前,必须将数组中的每个指针分配给一个内存空间scanf()

for(i=0;i<5;i++)  
{
    names[i]=malloc(100);  
    printf(" Enter a name which you want to register\n");  
    scanf("%99s",names[i]);
}
Run Code Online (Sandbox Code Playgroud)

3)如果你使用gcc和gcc版本> 2.7进行编译,那么你scanf()可以使用"%ms"而不是来分配内存"%s"

char *names[5];
for(i=0;i<5;i++)  
{
    printf(" Enter a name which you want to register\n");  
    scanf("%ms",&names[i]);
}
Run Code Online (Sandbox Code Playgroud)