我正在学习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?
答案 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;
}