如何使用另一个数组的字符在链接列表中附加数组

时间:2018-01-11 03:20:58

标签: c linked-list

我需要在链表中追加一个数组,其中一个数组的单个字符也在链表中。我尝试了strcat函数,但它没有工作。

for(int k=0; k < strlen(Node2->array); k++){
      strcat((char *)Node->array, (char *)Node2->array[k]);
}

ide提供此警告

cast to pointer from integer of different size -wint-to-pointer-cast

当我运行该程序时,程序停止,它无法继续。

1 个答案:

答案 0 :(得分:1)

没有办法在C中追加数组,因为数组是固定的(在编译时)连续存储的相同类型元素的列表。只有当你有足够的数组大小时,只需移动{{1}即可附加一个字符串(通过在有效字符列表的末尾添加\0空字符来部分填充的某个字符串数组)。 } char进一步放置(如果数组中有更多字符的位置)并在其前面放置所需的字符。一个例子将说明这一点(我会稍微简化一下,将你指出的与附加问题无关的列表问题分开)

让我们:

\0

第二个变量是一个初始化的数组,其中包含指示的字符串文字的内容,加上char c = 'A'; char array[100] = "The string to be appended with "; 个字符以完成数组大小,直到填充数组的100个字符空间。

附加\0变量内容的几种方法是:

c

另一种方式(如果您不需要知道操作是否成功并且只在分配空间时附加字符)是/* check first that array has space to store data */ int l = strlen(array); if (l + 1 < sizeof array) { array[l] = c; array[l+1] = '\0'; } 字符串值末尾的字符snprintf(3) 1}}正确控制空间)

snprintf(3)

顺便说一下,int l = strlen(array); /* number of chars in string */ snprintf(array + l, /* char pointer at string end */ sizeof array - l, /* the number of chars of space available */ "%c", /* format string to print a character */ c); /* data character to append */ 的返回值是打印的字符数,因此如果成功运作则应为snprintf(3),如果有&#39}则为1。数组中没有剩余空格来打印0变量和最终c字符,因此您可以检查操作的结果。

如果节点结构中有\0指针,因为您动态分配内存来存储字符串值(例如,使用char *函数),然后您没有空间在末尾添加任何字符,因为strdup(3)仅分配足够的空间来存储原始字符串的完整副本(字符,加上末尾的额外strdup(3))(即使该字符串也是如此)最初存储在一个更大的字符数组中)在这种情况下,附加字符的唯一方法是为新长度分配一个具有足够大小的新数组,并将所有字符复制到新位置。请注意,如果您在 per character 的基础上执行此操作,则会严重影响效率。