gpt4 book ai didi

c - 如何在链表中附加一个数组和另一个数组的字符

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

我需要在链表中附加一个数组,并且在链表中也添加一个数组字符。我尝试了 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

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

最佳答案

在 C 中,无法向数组追加内容,因为数组是根据定义固定(在编译时)连续存储的相同类型元素的列表。仅当您有足够的数组大小时,才可以通过简单地移动\0 字符再移一位(如果数组中还有更多字符的位置),并在其前面放置所需的字符。一个例子将说明这一点(我将稍微简化以分离您指出的与附加问题无关的列表问题)

让我们:

char c = 'A';
char array[100] = "The string to be appended with ";

第二个变量是一个数组,它使用指示的字符串文字的内容进行初始化,加上 \0 字符来完成数组大小,直到填充数组的 100 个字符空间。

附加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) 将字符放在字符串值的末尾(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)的返回值是打印的字符数,所以如果成功的话它应该是1,而0 以防数组中没有剩余空间来打印 c 变量和最后的 \0 字符,以便您可以检查操作结果.

注意

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

关于c - 如何在链表中附加一个数组和另一个数组的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199297/

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