3
我有一個緩衝區,本質上是一個char數組,填充了多個不同的結構。結構需要像這樣在緩衝區中傳遞,因爲它是我讀/寫套接字的東西。結構是一個頭結構和可能的「多重有效載荷」結構。無效指針訪問字符數組中的結構
只是爲了說明這一點,它看起來像這樣:
unsigned char buffer[buflen];
struct header *head;
struct payload1 *p1;
struct payload2 *p2;
etc...
現在,當我試圖填補這一緩衝,或從該緩衝區中檢索,我已經使用了void *ptr
它首先在位置初始化然後,緩衝器後來在頭後的位置,像這樣的:
void *ptr;
ptr = &buffer;
ptr += sizeof(header);
這實際工作正常 - 即指針指向正確的內存位置,我可以檢索(或插入)一個新的有效載荷結構就好了,但它確實會在中產生警告GCC。 warning: pointer of type ‘void *’ used in arithmetic
。
在這種情況下,我能做些什麼來避免此警告?
我知道字符通常是1個字節長,因此這將適用於大多數系統,但我認爲它沒有正確定義? – efr4k 2011-04-27 21:11:36
@espengra sizeof(char)由C標準定義爲1.沒有定義的是在void *上執行指針運算。 – 2011-04-27 21:16:15
char被定義爲C99標準中最小的可尋址類型。如果一些不明確的操作系統將char定義爲8位以外的字符,它仍然會被視爲「字節」大小的變量類型。儘管這很少見,並且通常可以忽略。 – 2011-04-27 21:19:36