动态分配的动态分配字符串数组

时间:2015-03-20 16:03:07

标签: c arrays string dynamic

我毕业后学习C并尝试刷新旧技能。我目前正在尝试创建一个动态分配的数组,该数组由动态分配的字符串组成。下面是我的代码,我试图在先前初始化的数组中添加一个形容词,其中第一个成员为NULL。最后一个成员应该始终为NULL。

char **addAdjective(char **array, const char *adjective)
{
    int i = 0;
    int count = 0;

    while (*array != NULL){
        array++;
        count += 1;
    }
    array = (char**) realloc(*array, sizeof(*array) * (count+2));

    int adjectiveLength = strlen(adjective);
    array[count] = (char*) malloc(sizeof(const char)*(adjectiveLength + 1));        

    for (i = 0; i < adjectiveLength; i++){
        array[count][i] = adjective[i];
    }
    array[count][i+1] = '\0';


    array[count+1] = NULL;    

    return array;   
}

当我用以下方式调用上述内容时:

adjectives = addAdjective(adjectives, "beautiful");
adjectives = addAdjective(adjectives, "ugly");
adjectives = addAdjective(adjectives, "sweet");

似乎有些不对劲,因为当我试图打印数组时我什么都没得到。

可能出现什么问题?

编辑:

打印功能应该没问题:

void printAdjectives(char **adjectives)
{
    if (!adjectives)
        return;
    while (*adjectives) {
        printf("%s  ", *adjectives);
        adjectives++;
    }
    printf("\n");
}

初始化:

char **initAdjectives(void)
{
    char **adjectives = (char **)malloc (1 * sizeof(char *));

    *adjectives = NULL;    

    return adjectives;
}

1 个答案:

答案 0 :(得分:1)

array[count][i+1] = '\0';

应该是

array[count][i] = '\0';

或更好

array[count][adjectiveLength] = '\0';

请注意,当代码到达该行i==adjectiveLength时。 您分配了adjectiveLength+1个字符,写入i+1已超出分配空间的末尾。

我不知道这是否是您唯一的错误,但这是非法的。