#include <stdio.h>
int main(void){
char a;
scanf("%s", &a);
return 0;
}
对我有用,但我想知道在其他情况下是否可能会有任何意想不到的结果。
以这段代码为例 -
#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;
}
您会期望它 print 1 = 1
,但是当我运行它时,它会打印= 1
(至少在我的编译器中,不要期望它有任何稳定的东西)
scanf 将一个字符串写入 a 的地址,期望在那里分配了足够的空间(在这种情况下这是错误的),该字符串具有输入字符和空终止符。在我的情况下,空终止符会覆盖其他一些内存 - b。这是未定义的行为 - 不要那样做(至少不要在期望它有意义的时候)。
要么使用 format%c
匹配 single char
,要么使用%s
匹配非空格字符的字符串。
将它们混合在一起(就像在您的代码中一样)是未定义的行为,任何事情都可能发生。