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);