【发布时间】:2010-06-26 10:14:38
【问题描述】:
我不明白结构的内存重新分配如何允许我将更大的 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*”,但无论出于何种原因,我都做不到。字符串必须存储在结构本身中。
我的困惑来自于我没有为任何特定目的调整结构的大小。在该示例中,我没有以某种方式表明我希望将额外的空间分配给北纹理字符数组。我想我分配的额外内存用于实际存储字符串,并且当我调用 strcpy 时,它意识到没有足够的空间......
任何关于它是如何工作的(或者它是如何存在缺陷的)的解释都会很棒。
【问题讨论】:
-
欢迎来到 Stack Overflow!为了将来参考,我们通过在每行前面添加四个空格来格式化代码。对于代码示例,您不需要使用
<br>或[code]。 (请注意,Ctrl+K 或在所选文本的格式工具栏上按“101010”按钮与在每行前添加四个空格相同)。 -
当你说“但我不能出于任何原因”时,你是在暗示这是一个假设的练习吗?如果这是假设性的,那么下面的答案清楚地为您提供了选择。如果您有真正的应用需求,请告诉我们它是什么。退后一步可能会为您提供能够大大改进您的整体设计的建议。
-
回答您的问题标题:这实际上是不可能的,但是您可以给用户一种可以实现的错觉。请参阅下面的答案。