【发布时间】:2019-06-18 09:00:59
【问题描述】:
在创建自己的 malloc 时,我使用 write 来打印一些值。
我在打印值时没有任何问题,我只是创建一个 char 变量来存储我的号码并打印它,但我不明白为什么演员表不起作用。 write的原型是:
ssize_t write(int fd, const void *buf, size_t count)
所以我将我的号码输入 void * 没有任何结果。
int nb = 3;
char numb = nb + '0';
write(1, (void *)(nb + '0'), 1); // Display nothing
write(1, &numb, 1); // Display 3
谁能解释一下为什么第一次写什么都不显示?
【问题讨论】:
-
(void *)(nb + '0')是指向无效地址的指针 - 我很惊讶它没有段错误。 -
你为什么不检查
write的返回值是否有错误? -
@PaulR 系统调用不会出现段错误,它们是
EFAULT。 -
write(1, &numb, 1); // Display 34- 这让我很吃惊。尤其是当您告诉它只打印一个字符时它正在打印两个字符。 -
@GregLoupy 您正在获取一个随机整数(在本例中为 82)并将其转换为指针。那怎么会是一个有效的地址?