我不明白结构的内存重新分配如何允许我将更大的 char 数组插入到我的结构中。
结构定义:
typedef struct props
{
char northTexture[1];
char southTexture[1];
char eastTexture[1];
char westTexture[1];
char floorTexture[1];
char ceilingTexture[1];
} PROPDATA;
例子:
void function SetNorthTexture( PROPDATA* propData, char* northTexture )
{
if( strlen( northTexture ) != strlen( propData->northTexture ) )
{
PROPDATA* propPtr = (PROPDATA*)realloc( propData, sizeof( PROPDATA ) +
sizeof( northTexture ) );
if( propPtr != NULL )
{
strcpy( propData->northTexture, northTexture );
}
}
else
{
strcpy( propData->northTexture, northTexture );
}
}
我已经测试过类似的东西并且它似乎有效,我只是不明白它是如何工作的。现在我希望有些人在想“只使用一个 char*”,但我不能出于任何原因。字符串必须存储在结构本身中。
我之所以感到困惑,是因为我没有为任何特定目的调整结构的大小。在该示例中,我并没有以某种方式表明我希望将额外空间分配给 north 纹理字符数组。我想象我分配的额外内存用于实际存储字符串,并且不知何故当我调用 strcpy 时,它意识到没有足够的空间......
如果能解释一下这是如何工作的(或者这是有缺陷的),那就太好了。
最佳答案
这是 C 还是 C++?您发布的代码是 C,但如果它实际上是 C++(如标记所暗示的),则使用 std::string
。如果是C,那么有两个选项。
如果(如您所说)您必须将字符串存储在结构本身中,那么您将无法调整它们的大小。 C 结构根本不允许这样做。 “大小为 1 的数组”技巧有时用于将单个可变长度字段固定到结构的末尾,但不能用于其他任何地方,因为每个字段在结构中都有固定的偏移量。您能做的最好的事情就是确定一个最大大小,并使每个数组成为该大小的数组。
否则,将每个字符串存储为 char*
,并使用 realloc
调整大小。
关于c++ - 如何将可变大小的 char 数组放入结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123479/