scanf中的固定长度数组。使用格式进行警告

时间:2013-04-18 13:09:34

标签: c warnings string-formatting scanf

所以我输入了以下内容:

typedef char array[25];

在我的代码中,我将scanf称为:

scanf("%s",array);

但是我得到警告,%s在我传递char * [25]时期待一个char *。有什么方法可以摆脱这个警告吗?

3 个答案:

答案 0 :(得分:0)

array是类型,不是对象。你不能在scanf

中将其作为参数传递
array a;
scanf("%s", a);

答案 1 :(得分:0)

typedef定义了一种数据类型,以便您可以使用它来定义具有相同数据类型的不同变量。 像:

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

尽管数据类型相同,但定义它们正在详细阐述。 您需要做的就是:array a;然后scanf("%s",a);

希望你清楚核心! :)

答案 2 :(得分:0)

我假设你的代码是缩写的......

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

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

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

请记住允许空终止符 - 更好,显式zap数组[len-1]为0。

有可能更好的方法来读取字符串而不是scanf。例如,查看一些基于令牌的方法。

HTH,露丝