scanf中的固定长度数组。警告格式为

scanf中的固定长度数组。警告格式为,c,warnings,string-formatting,scanf,C,Warnings,String Formatting,Scanf,因此,我输入了以下内容: typedef char array[25]; 在我的代码中,我这样称呼scanf: scanf("%s",array); 但是当我传递一个char*[25]时,我收到一个警告,说%s需要一个char*。有没有办法消除这个警告?数组是类型而不是对象。您不能在scanf array a; scanf("%s", a); 定义数据类型,以便使用它定义具有相同数据类型的不同变量。 比如: 虽然数据类型是相同的,但是定义它们是很复杂的。 这里需要做的就是:获取数组a然后s

因此,我输入了以下内容:

typedef char array[25];
在我的代码中,我这样称呼scanf:

scanf("%s",array);

但是当我传递一个char*[25]时,我收到一个警告,说%s需要一个char*。有没有办法消除这个警告?

数组
是类型而不是对象。您不能在
scanf

array a;
scanf("%s", a);
定义数据类型,以便使用它定义具有相同数据类型的不同变量。 比如:

虽然数据类型是相同的,但是定义它们是很复杂的。 这里需要做的就是:获取
数组a然后
scanf(“%s”,a)


希望你的核心是清楚的!:)

我假设您的代码是缩写的

警告的实际原因是编译器知道两件事:您有一个长度有限的字符数组,scanf将扫描原始字符串中给定的字符数;可能会溢出为其提供的阵列

这是一个真正的问题:编译器是非常正确的

解决方案是更好地指定scanf格式。在这种情况下,我建议使用“%24s”告诉scanf该格式元素要读取的最大字符数

记住要考虑空终止符-更好的是,用0显式地zap数组[len-1]

可能有比scanf更好的方法来读取字符串。例如,研究一些基于令牌的方法


嗯,露丝

奇怪的是,你所发布的
数组
是一种类型,而不是对象。所以这根本不应该起作用。请给我们看你的代码的真实行。GCC拒绝为我编译此代码。。。这是你的真实代码吗?如果是,它是如何编译的?好的,很抱歉。我声明了一个数组类型的变量,可以说是a。我使用的正确的scanf是scanf(“%s”,a),然后我得到了警告。我真的很抱歉,如果编译了上面的代码,我肯定会得到一个错误。我现在可以做些什么来消除错误呢?
typedef char employee[25];
typedef char customer[25];
employee a, b;
customer y, z;
printf("Enter first employee's name: ");
scanf("%s",a);
printf("Enter customer's name: ");
scanf("%s",y);