变长结构体
1 struct test 2 { 3 int nSize; 4 char data[]; // 或者 char data[0];但建议使用 char data[]; 注意:c98 时不支持柔性数组,其仅作为非标准扩展。到c99时纳入标准 5 };
如上面代码即为一变长结构体,其中 char data[]; 为一变长数组,称之为柔性数组。正是因其为变长数组,故结构体才可变长。使用 test 结构体时,可用 malloc 申请大于 sizeof(test) 长度的空间。如下:
1 const auto nSizeTest = sizeof(test); 2 const auto nExtraSize = 3 * (sizeof(char)); 3 4 test* stpTest = (test*)malloc(nSizeTest + nExtraSize); 5 6 stpTest->nSize = nSizeTest + nExtraSize; 7 memset((void*)stpTest->data, 0x0L, nExtraSize); 8 const auto nTempLen = strlen(stpTest->data); 9 for (auto nIndex = 0; nIndex < nExtraSize - 1; ++nIndex) { 10 stpTest->data[nIndex] = char(96 + nIndex); 11 } 12 stpTest->data[nExtraSize - 1] = '