使用struct {... char arr [1]; 构造?

Shr*_*dha 7 c

我查看了几个实例,其中我看到类似char fl[1]以下代码片段中的内容.我无法猜测这种构造的使用可能是什么.

struct test
{
    int i;
    double j;
    char fl[1];
};

int main(int argc, char *argv[])
{
    struct test a,b;
    a.i=1;
    a.j=12;
    a.fl[0]='c';

    b.i=2;
    b.j=24;
    memcpy(&(b.fl), "test1" , 6);
    printf("%lu %lu\n", sizeof(a), sizeof(b));
    printf("%s\n%s\n",a.fl,b.fl);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出 -

24 24 
c<some junk characters here>
test1
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 7

它被称为"结构黑客",你可以在C FAQ上阅读它.一般的想法是,为列出的结构分配更多内存,然后在末尾使用数组,就像它的长度大于1一样.

不再需要使用这个hack,因为它已被C99 + 灵活的阵列成员所取代.