#include <stdio.h>
int main(void){
char a;
scanf("%s", &a);
return 0;
}
适合我,但我想知道在其他情况下是否会有任何意外结果。
答案 0 :(得分:1)
以此代码为例 -
#include <stdio.h>
int main(void){
char a;
char b = '1';
char c = '1';
scanf("%s", &a);
printf("%c = %c\n", b, c);
return 0;
}
你会期望它打印1 = 1
,但就在我运行它时,它打印= 1
(至少在我的编译器中,不要指望它有任何稳定性)
scanf将字符串写入a的地址,期望在那里分配足够的空间(在这种情况下这是错误的),此字符串具有输入char和null终止符。在我的例子中,null终止符覆盖了一些其他内存 - b。这是未定义的行为 - 不要这样做(至少不要期望它有任何意义)。
答案 1 :(得分:1)
使用格式%c
匹配单个char
,或使用%s
匹配字符串。
将它们混合(就像在代码中一样)是未定义的行为,可能发生任何事情。