我遇到了这段代码:
char str[600];
scanf("%s", &str);
当然,这会发出如下警告:
a.c:6:17: warning: format specifies type 'char *' but the argument has type
'char (*)[600]' [-Wformat]
scanf("%s", &str);
~~ ^~~~~~~
我知道正确的方法是去掉&
并输入scanf("%s", str)
。但是它确实可行,所以我的问题是这是否会引起任何问题。它是否是未定义的行为?当我将str
从数组改为指针时,它(显然)无法工作。但在使用数组时,这会导致任何问题吗?
fscanf
的规定如下:如果此对象没有适当类型,或者转换的结果无法表示为该对象,行为将未定义。 - kluttchar *
和char (*)[600]
不是兼容的类型(这个术语由 C17 6.2.7 定义)。 - M.Munsigned char *
,因为它符合“字符”的描述。 - M.M