#include <stdio.h>
int main(void) {
char a, b, c;
scanf("%2c%2c",&a, &b);
printf("%c%c",a, b);
return 0;
}
当我输入“ asdfghj”时,它将输出“ fd”,而不是“ ad”
答案 0 :(得分:1)
代码的行为是不确定的,这意味着根据使用的编译器和在其上运行生成的可执行文件的机器,代码可能会有不同的结果。
可能会产生您观察到的结果的一种可能性是,编译器将a
和b
存储在堆栈上,为每个分配空间以恰好容纳一个char
。这样会导致这样的布局(假设char
是一个字节):
==========================================================================
| Memory Address | Variable | Value after | Value after | End result |
| (byte) | | assignment to | assignment to | |
| | | `a` | `b` | |
==========================================================================
| 128 | | s | s | s |
| 127 | a | a | f | f |
| 126 | b | ? | d | d |
--------------------------------------------------------------------------
在x86上,堆栈向下增长(从高地址到低地址),因此这很可能就是您所观察的。
但是请记住,您不应该依赖此行为,因为不能保证在所有情况下都能以相同的方式工作。