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

为何write函数无法打印整数变量asd的值?

关于write函数无输出的问题解答

你的代码如下:

#include <unistd.h>

int main()
{
    int  asd  = 21;
    int *pAsd = &asd;

    write(1, pAsd, 4);
}

你看不到输出的核心原因是:write确实按要求执行了写入操作,但你写入的是整数21的二进制原始字节,而非终端能识别显示的字符形式数字。

  • 整数21在内存中以二进制存储(比如小端架构下是0x15 0x00 0x00 0x00),其中0x15对应的ASCII是不可打印的控制字符(NAK),后面的三个0x00是空字符,这类字符终端不会显示,所以你看不到任何内容。
  • 你传入pAsd作为write的第二个参数是符合手册要求的,函数本身没有执行错误。

如果要输出数字21的可见字符,需要先把整数转换成字符串,再写入。示例代码:

#include <unistd.h>
#include <stdio.h>

int main()
{
    int asd = 21;
    char buf[16];
    // 将整数转为字符串,返回字符串长度
    int str_len = sprintf(buf, "%d\n", asd);
    // 写入字符串到标准输出
    write(1, buf, str_len);
    return 0;
}

另外可以通过write的返回值验证写入是否成功,比如:

ssize_t ret = write(1, pAsd, 4);
if (ret == -1) {
    perror("write failed");
}

执行原代码时,ret会返回4,说明已经成功写入了4个字节,只是内容不可见。

内容的提问来源于stack exchange,提问作者Huseyin Donmez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:02:12