当我创建自己的malloc时,我使用write来打印一些值。
打印值没有任何问题,我只是创建了一个char变量来存储我的数字并打印它,但是我不明白为什么强制转换不起作用。 写的原型是:
ssize_t write(int fd, const void *buf, size_t count)
所以我将我的电话号码强制为空*,没有任何结果。
int nb = 34;
char numb = nb + '0';
write(1, (void *)(nb + '0'), 1); // Display nothing
write(1, &numb, 1); // Display 34
有人可以解释为什么第一次写时什么都不显示?
答案 0 :(得分:6)
是的,但这不是 cast ,而是复合文字:
write(1, &(char){nb + '0'}, 1);
或:
plot.calculateMinMaxVals();
RectRegion bounds = plot.getBounds();
plot.setRangeBoundaries(
bounds.getMinY().doubleValue() - 1, BoundaryMode.FIXED,
bounds.getMaxY().doubleValue() + 1, BoundaryMode.FIXED);
plot.setDomainBoundaries(
bounds.getMinX().doubleValue() - 1, BoundaryMode.FIXED,
bounds.getMaxX().doubleValue() + 1, BoundaryMode.FIXED);
答案 1 :(得分:1)
(void *)(nb + '0')
试图以实际值nb + '0'
取消引用内存,就像该值是一个地址一样。 (nb + '0')
不是左值,因此也不能在其上使用&
运算符。您应该做的是:
如果您使用的是小端系统(似乎是OP的情况):
nb += '0';
write(..., &nb, ...);
如果您使用的是Big-endian系统:
char foo = (nb >> (CHAR_BIT * (sizeof(int) - 1))) & 0xff;
foo += '0';
write(..., &foo, ...);
答案 2 :(得分:0)
强制转换为void *意味着将给定值视为void指针。
但是给定的“地址”是34 +'0',这显然是无效的。
您必须给write
一个指针,这样才能做不到这样的事情。您必须将要打印的值存储在内存中的某个位置,并提供指向该位置的指针。