0
#include <stdio.h>

int main(void){

char a;
scanf("%s", &a);

return 0;
}

对我有用,但我想知道在其他情况下是否可能会有任何意想不到的结果。

4

2 回答 2

2

以这段代码为例 -

#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。这是未定义的行为 - 不要那样做(至少不要在期望它有意义的时候)。

于 2013-09-24T13:08:10.570 回答
1

要么使用 format%c匹配 single char,要么使用%s匹配非空格字符的字符串。

将它们混合在一起(就像在您的代码中一样)是未定义的行为,任何事情都可能发生

于 2013-09-24T13:14:58.490 回答