【发布时间】:2010-08-31 09:47:39
【问题描述】:
可能重复:
Array of zero length
我见过这样的代码:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pkt {
int pk_type;
int tag;
int magic_num;
char data[0]; <-------- what does this mean ???
}__attribute__((packed));
typedef struct pkt p_t;
int main(void)
{
p_t *p = (p_t *)calloc(1, sizeof(p_t));
if(!p) {
perror("p");
return -1;
}
p->pk_type = 1;
p->tag = 0xb00bbabe;
p->magic_num = 0xcafebabe;
strcpy("hello world", p->data); <-- Seg faults here !!!
return 0;
}
我想知道 arr[0] 的含义。我的意思是在什么情况下我们需要使用 arr[0]。它有什么用途?
【问题讨论】:
-
即使数组被定义为足够大,这也会出现段错误 - 您正在从
p->data复制到字符串文字。 -
请注意:C++ 不允许静态的零长度数组。
-
@DeadMG:C 和 C++ 都不允许在任何地方使用零长度数组。零长度数组声明总是明确非法的。
-
@Andrey..此 URL 讨论零边距数组 gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/…
-
@Anil Vishnoi:你希望我在那个 URL 上找到什么?
标签: c