You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中使用read()系统调用从标准输入读取整数值?

如何用read()系统调用从标准输入读取整数值?

你的代码输出异常的核心问题是read()系统调用读取的是原始二进制字节,不会自动将输入的文本字符转换为整数。

问题分析

你输入的54是ASCII字符,对应的字节是0x35('5')和0x34('4')。而int类型通常占4字节,read()会把这两个字节和另外两个补全的空字节(0x00)一起写入变量n。在小端字节序的系统中,这些字节会被组合成0x00003435,转换成十进制就是668725,也就是你看到的输出。

正确实现方式

因为标准输入默认是文本模式,用户输入的是字符形式的数字,所以需要先读取文本字符串,再转换成整数。以下是可行的实现:

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char buf[16];
    // 读取输入的文本,预留一个字节给字符串终止符
    ssize_t bytes_read = read(0, buf, sizeof(buf)-1);
    
    if(bytes_read > 0){
        // 添加字符串终止符,确保后续字符串函数能正常工作
        buf[bytes_read] = '\0';
        // 移除输入末尾的换行符(如果存在)
        buf[strcspn(buf, "\n")] = '\0';
        // 将字符串转换为整数
        int n = atoi(buf);
        printf("[%d]\n", n);
    }
    return 0;
}

补充说明

如果一定要直接用read()读取二进制整数,那需要输入的是对应整数的二进制字节(比如通过其他程序输出二进制数据到标准输入),但这不是常规的交互式输入场景,不适合从键盘读取整数的需求。

内容的提问来源于stack exchange,提问作者Suchitra Mahato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:10