gpt4 book ai didi

c - 动态调整字符串数组的大小

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:12 24 4
gpt4 key购买 nike

我需要一个字符串数组,其中数组的长度在编译时未知。我所做的是:

char **words;

words = malloc(capacity * sizeof(char *));

char nextword[MAX_LEN + 1];

while (true) {
if (num_entries == capacity) {
capacity += 5;
realloc(words, (sizeof(char *) * capacity));
}

printf("\nEnter a word: ");
fgets (nextword, MAX_LEN, stdin);

remove_newline(nextword);

if (strlen(nextword) == 0) break;

words[num_entries] = malloc(strlen(nextword + 1));

if (words[num_entries] == NULL) {
printf("\nout of space\n");
break;
}

strcpy(words[num_entries], nextword);
num_entries++;

这似乎可以扩大一次大小,除了扩大后的第一个元素由于某种原因变成了NULL。第二次执行 realloc 时出现错误:

"invalid next size".

最佳答案

realloc 不能保证给您返回相同的内存块,因为最初从堆中分配的 block 可能没有足够的空间来容纳您新请求的大小。在这种情况下,您将取回一个新的内存块,其中复制了您的旧数据。

您需要捕获每个循环的返回值并使用它来检查您期望的数据,并检查它是否为 0(如果 realloc 无法完成)。

words = realloc(words,..)

是一种反模式 - 避免这种情况,因为如果 realloc 失败,您的旧内存可能会丢失。

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

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