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