在输入字符串时,我收到警告,如
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]);
}
}
答案 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]);会得到正确的结果