C - 使用read()从stdin读取整数

tom*_*w__ 2 c

我正在学习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吗?

Dav*_*rtz 6

你很困惑1,十进制数字,一个,数字.您还将第一名与计算机内部代表性混淆.

击中1键盘上的键的人没有输入计算机的第一个内部表示.因此,将该键直接读入整数变量会产生垃圾.

计算机内部存储2609为0x31,0x0A(假设为小端).当人员点击1然后进入时,键盘发送0x31(ASCII码代码1)然后输入(0x0A).

但这是一个垃圾进入垃圾箱的情况.您不应该将整数的地址传递给不期望指向整数的指针的函数.