【问题标题】:inputting strings into a multidimensional character array?将字符串输入多维字符数组?
【发布时间】:2015-07-26 05:47:09
【问题描述】:

在输入字符串时,我收到类似

的警告
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]);
    }
}

【问题讨论】:

  • 记住这一点:每当您通过scanf 扫描%s 时,不要使用带有变量名的&。

标签: c arrays


【解决方案1】:
scanf("%s",&a[i]);
           ^ This will pass address of `a[i]` thus giving error.

作为%s 说明符需要一个指向字符数组中第一个字符的指针。并且使用&amp;a[i] 将评估char (*)[10]

应该这样做 -

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

【讨论】:

  • 我们可以使用 %s 代替 %9s,因为我不想在打印字符串时在字符串之间留出多余的空格。
  • @nani 是的,你可以使用%s 没问题。
  • @nani 但是extra space 是什么意思,因为%9s 只会在数组中存储前 9 个字符,但不会超过这个值。所以使用%s无论如何都不会伤害你。
【解决方案2】:

是的,因为数组指向数组的指针是有区别的。您可以使用 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]);
    }
}       

【讨论】:

  • 您也可以在问题中使用 2D 数组,这意味着这个答案并没有太大帮助——它提供了一种替代机制,而不是修复在问题。
【解决方案3】:

代码:scanf("%s",&a[i]);

&a[i] 指向 char **,因为 a 是二维 char 数组。

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

【讨论】:

  • &amp;a[i]char(*)[10],而不是 char**
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2017-04-23
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多