2016-10-08 63 views
2

我有以下行:指针转换在C

char *name = malloc(strsize + 1); 

uint8_t *data; 
data = (uint8_t *)name; 

这是正确的?当转换完成时,指针*名称不会被解释为不好的机会?

+0

可能的[在C中uint8和char之间的转换]重复(http://stackoverflow.com/questions/35264923/conversion-between-uint8-and-char-in-c) – gsamaras

+0

出于兴趣,你你malloc直接uint8_t *? – Bathsheba

+0

,因为我需要在某人编写的程序中发现一个巨大的漏洞(他说有漏洞),我需要找到它,我想知道这是否是。 – user6575913

回答

1

这不应该是太大的问题,除了内存的符号性会受到不同的访问之间沿dataname解释。在大多数实际平台中,大小为charuint8_t的位是相同的。

+0

,如果他们被解释不同,你可能会访问你不想要的内存位置? – user6575913

+0

@ user6575913它是解释数据的符号性,**不** **指针的符号性 –

+0

@ user6575913示例:'data [0] = 255;'print'(int)name [0]'将产生-1。这可能会让人困惑,但是你没有访问任何“禁止”内存。 – tofro

0

不,转换是合法的。但是,当您尝试打印data时会出现问题,因为您不再有char*。除此之外,铸件完全支撑。