如何在结构中拟合可变大小的char数组?

Mat*_*sch 0 c c++ arrays struct

我不明白如何重新分配结构的内存允许我在我的结构中插入一个更大的char数组.

结构定义:

typedef struct props
{
    char northTexture[1];
    char southTexture[1];
    char eastTexture[1];
    char westTexture[1];
    char floorTexture[1];
    char ceilingTexture[1];
} PROPDATA;
Run Code Online (Sandbox Code Playgroud)

例:

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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

我测试了类似于此的东西,它似乎工作,我只是不明白它是如何工作的.现在我希望有些人会想"只是使用一个字母*",但我不能出于任何原因.字符串必须存储在结构本身中.

我的困惑来自于我没有为任何特定目的重新调整我的结构.我没有以某种方式表明我希望在该示例中将额外空间分配给北纹理char数组.我想我分配的额外内存用于实际存储字符串,不知怎的,当我调用strcpy时,它意识到没有足够的空间......

关于它如何工作(或者甚至是如何有缺陷的)的任何解释都会很棒.

Mik*_*our 9

这是C还是C++?您发布的代码是C,但如果它实际上是C++(正如标签所暗示的那样),那么请使用std::string.如果它是C,那么有两种选择.

如果(正如您所说)您必须将字符串存储在结构本身中,那么您无法调整它们的大小.C结构根本不允许这样做."1号数组"技巧有时用于将单个可变长度字段固定到结构的末端,但不能在其他任何地方使用,因为每个字段在结构中都有固定的偏移量.您可以做的最好的事情是决定最大尺寸,并使每个尺寸都成为一个数组.

否则,将每个字符串存储为a char*,然后调整大小realloc.