使用read()从stdin读取整数的C语言方法

3

我正在学习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个回答

6
你混淆了十进制数字1和数字one。你还混淆了数字one和计算机内部表示的数字one
按下键盘上的1键并不是在输入计算机内部表示的数字1。因此,直接将其读入整数变量会得到垃圾值。
计算机内部将2609存储为0x31、0x0A(假设采用小端序)。当用户按下1键,然后按下回车键时,键盘发送一个0x31(ASCII代码为1)和一个回车符(0x0A)。
但这是一种垃圾输入,垃圾输出。你不应该将整数的地址传递给不期望整数指针的函数。

2

我假设你正在从标准输入读取...

使用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


1

你需要了解二进制和ASCII码。你将ASCII码输入控制台,然后再次转换为ASCII码。

此外,一个字符通常只有1个字节。你正在读取4个字节(假设这是int的大小)。你需要进行大量的研究和阅读。


1

您正在从流中读取一个字符,并尝试将其打印为整数

请使用:

printf("%c", buffer);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接