2016-10-08 96 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*。除此之外,鑄件完全支撐。