我需要在链表中追加一个数组,其中一个数组的单个字符也在链表中。我尝试了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
当我运行该程序时,程序停止,它无法继续。
答案 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 的基础上执行此操作,则会严重影响效率。