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

时间:2012-05-31 18:29:56

标签: 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;
}

输入:

1

输出:

2609

这里发生了什么?输出不应该是1?

4 个答案:

答案 0 :(得分:6)

您将十进制数1与一个数字混淆。您还将第一名与第一名的计算机内部表示混淆。

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

计算机内部存储2609为0x31,0x0A(假设为little-endian)。当人员点击1然后输入时,键盘会发送一个0x31(1的ASCII码),然后输入一个(0x0A)。

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

答案 1 :(得分:1)

您需要阅读二进制和ascii。您将ASCII输入控制台,然后再将其转换为ascii。

此外,字符仅(通常)为1个字节。你正在读4(假设是int的大小)。你前面有很多研究和阅读。

答案 2 :(得分:1)

您正在从流中读取character并尝试将其打印为integer

使用:

printf("%c", buffer);

答案 3 :(得分:1)

我假设你正在阅读stdin ......

使用scanf功能

int scanf(const char *format, ...);

在您的代码中:

int main() {    
    int buffer;
    scanf("%d", &buffer);
    printf("%d", buffer);
    return 0;
}

查看网址: http://en.wikipedia.org/wiki/Scanf_format_string