为何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
相关产品推荐
相关产品推荐

