所以我输入了以下内容:
typedef char array[25];
在我的代码中,我将scanf称为:
scanf("%s",array);
但是我得到警告,%s在我传递char * [25]时期待一个char *。有什么方法可以摆脱这个警告吗?
答案 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,露丝