首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中复制字符串数组时出错

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

Stack Overflow用户
提问于 2014-02-19 14:43:31
回答 1查看 81关注 0票数 0

我对这个函数有个小错误:

代码语言:javascript
复制
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()这样调用的:

代码语言:javascript
复制
tab = addtotab(tab, line)

我的问题是,tab在程序结束时有错误的数据。tab[0]总是空的。

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

代码语言:javascript
复制
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

但我得到了这个结果

代码语言:javascript
复制
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

你能帮帮我吗?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 14:55:51

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21883793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档