gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:22:38 26 4
gpt4 key购买 nike

毕业后我正在学习 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;
}

最佳答案

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

应该是

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

或者更好

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

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

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

关于c - 动态分配的字符串的动态分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29170926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com