我有以下行:指针转换在C
char *name = malloc(strsize + 1);
和
uint8_t *data;
data = (uint8_t *)name;
这是正确的?当转换完成时,指针*名称不会被解释为不好的机会?
我有以下行:指针转换在C
char *name = malloc(strsize + 1);
和
uint8_t *data;
data = (uint8_t *)name;
这是正确的?当转换完成时,指针*名称不会被解释为不好的机会?
这不应该是太大的问题,除了内存的符号性会受到不同的访问之间沿data
和name
解释。在大多数实际平台中,大小为char
和uint8_t
的位是相同的。
,如果他们被解释不同,你可能会访问你不想要的内存位置? – user6575913
@ user6575913它是解释数据的符号性,**不** **指针的符号性 –
@ user6575913示例:'data [0] = 255;'print'(int)name [0]'将产生-1。这可能会让人困惑,但是你没有访问任何“禁止”内存。 – tofro
不,转换是合法的。但是,当您尝试打印data
时会出现问题,因为您不再有char*
。除此之外,铸件完全支撑。
可能的[在C中uint8和char之间的转换]重复(http://stackoverflow.com/questions/35264923/conversion-between-uint8-and-char-in-c) – gsamaras
出于兴趣,你你malloc直接uint8_t *? – Bathsheba
,因为我需要在某人编写的程序中发现一个巨大的漏洞(他说有漏洞),我需要找到它,我想知道这是否是。 – user6575913