将字符串输入多维字符数组?

时间:2015-07-26 05:47:09

标签: c arrays

在输入字符串时,我收到警告,如

error: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[10]'

在申请中

#include<stdio.h>
int main(void)
{
    char a[100][10];
    int s,i,k=0;
    scanf("%d",&s);
    for(i=0;i<s;i++)
    {
        scanf("%s",&a[i]);
    }
}

3 个答案:

答案 0 :(得分:5)

scanf("%s",&a[i]);
           ^ This will pass address of `a[i]` thus giving error.

由于%s说明符需要指向字符数组中第一个字符的指针。将&a[i]一起使用将评估char (*)[10]

相反应该这样做 -

scanf("%9s", a[i]);

答案 1 :(得分:1)

是的,因为数组指向数组的指针之间存在差异。您可以使用char *a[100];作为指向100个元素数组的指针,并且每次使用malloc / calloc动态分配空间。该计划看起来像:

#include<stdio.h> 
#include<stdlib.h>         
int main(void)
{
    char *a[100];
    int s,i,k=0;
    scanf("%d",&s);
    for(i=0;i<s;i++)
    {
        a[i] = (char *) malloc (sizeof(char)*10);
        scanf("%s",a[i]);
        printf("%s",a[i]);
    }
}       

答案 2 :(得分:0)

代码:scanf(&#34;%s&#34;,&amp; a [i]);

&amp; a [i]指向char **,因为a是2D char数组。

代码:scanf(&#34;%s&#34;,a [i]);会得到正确的结果