gpt4 book ai didi

c - 在 C 中复制字符串数组时出错

转载 作者:行者123 更新时间:2023-11-30 17:39:14 25 4
gpt4 key购买 nike

这个函数有一个小错误:

char **addtotab(char **tab, char *newline) {
int u;
char **new;

u = 0;
while (tab[u])
u++;

if ((new = (char **)malloc(sizeof(char *) * (u + 2))) == NULL)
return (NULL);

u = 0;
while (tab[u]) {
new[u] = strdup(tab[u]);
u++;
}
new[u] = strdup(newline);
new[u + 1] = NULL;

u = 0;
while (tab[u]) {
free(tab[u]);
u++;
}
free(tab);
return (new);
}

它是从 main() 调用的,如下所示:

tab = addtotab(tab, line)

我的问题是 tab 在程序末尾有错误的数据。 tab[0] 始终为空。

例如,我使用以下数据初始化 tab:

Alii summum decus in carruchis solito altioribus
Et quia Montius inter dilancinantium manus
Restabat ut Caesar post haec properaret accitus et
Siquis enim militarium vel honoratorum aut nobilis
Et olim licet otiosae sint tribus pacataeque
Ut enim quisque sibi plurimum confidit et ut
Sed laeditur hic coetuum magnificus splendor
Etenim si attendere diligenter, existimare vere de
Denique Antiochensis ordinis vertices sub uno
Post quorum necem nihilo lenius ferociens Gallus

但我得到了这个结果

Empty
Et quia Montius inter dilancinantium manus
Restabat ut Caesar post haec properaret accitus et
Siquis enim militarium vel honoratorum aut nobilis
Et olim licet otiosae sint tribus pacataeque
Ut enim quisque sibi plurimum confidit et ut
Sed laeditur hic coetuum magnificus splendor
Etenim si attendere diligenter, existimare vere de
Denique Antiochensis ordinis vertices sub uno
Post quorum necem nihilo lenius ferociens Gallus

你能帮我吗?非常感谢。

最佳答案

您必须为 u + 2 元素分配空间,而不是为 u + 1 元素分配空间。

例如,如果 u2,则您的原始选项卡有 3 个元素(第一个、第二个、NULL),现在您需要空间容纳 4 个元素。

关于c - 在 C 中复制字符串数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883793/

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