C 长度为0 的数组
有时候 C结构体中,成员的长度不固定,需要 malloc分配,比如
typedef struct sinictx{
FILE* fp;
int fclen;
char* fcontent;
}inictx_t;
fcontent 代表文件内容,长度不能固定,上面的写法, 分配的时候这样写:
FILE* fp = fopen("conf.ini", "rb");
int fsize = getfsize(fp);
char* mem = (char*)malloc(sizeof(inictx_t) + fsize );
inictx_t* ctx = (inictx_t*)mem;
ctx->fcontent = mem + sizeof(inictx_t);
fread(ctx->fcontent, 1, fsize, fp);
....
这样写没毛病。然而还有一种写法你要知道:
typedef struct sinictx{
FILE* fp;
int fclen;
char fcontent[0];
}inictx_t;
此时, sizeof(inictx_t) 为 8,而且 fcontent 指向了 fclen后面的内存,节约了 4个字节,且写起来稍微方便了写=些。
inictx_t* ctx = (inictx_t*)malloc(sizeof(inictx_t) + fsize );
无需再对 fcontent赋值,直接访问 ctx->fcontent 即可