我正在学习C而且我不理解下面代码的行为:
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int buffer;
read(0, &buffer, sizeof(int));
printf("%d", buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入:
1
Run Code Online (Sandbox Code Playgroud)
输出:
2609
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?输出不应该是1吗?
你很困惑1,十进制数字,一个,数字.您还将第一名与计算机内部代表性混淆.
击中1键盘上的键的人没有输入计算机的第一个内部表示.因此,将该键直接读入整数变量会产生垃圾.
计算机内部存储2609为0x31,0x0A(假设为小端).当人员点击1然后进入时,键盘发送0x31(ASCII码代码1)然后输入(0x0A).
但这是一个垃圾进入垃圾箱的情况.您不应该将整数的地址传递给不期望指向整数的指针的函数.