首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用另一个数组的字符在链接列表中追加数组

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

Stack Overflow用户
提问于 2018-01-11 03:20:58
回答 1查看 178关注 0票数 0

我需要在链接列表中添加一个数组,并在链接列表中添加一个数组的单个字符。我试了一下strcat函数,但没成功。

代码语言:javascript
代码运行次数:0
运行
复制
for(int k=0; k < strlen(Node2->array); k++){
      strcat((char *)Node->array, (char *)Node2->array[k]);
}

ide给出了这个警告

代码语言:javascript
代码运行次数:0
运行
复制
cast to pointer from integer of different size -wint-to-pointer-cast

当我运行程序的时候,程序就停止了,它不能继续了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 09:31:41

没有办法在C中追加数组,因为每个定义都是固定的(在编译时)相同类型元素的列表是连续存储的。只有在数组大小足够大的情况下,才能通过将\0字符进一步移动一个位置(如果数组中有更多字符的位置)并将所需字符放在它前面,就可以追加一个字符串(它是通过在有效字符列表末尾追加一个\0空字符而部分填充的字符)。一个示例将说明这一点(我将稍微简化,以分离您所指出的与附加问题无关的列表问题)

让我们拥有:

代码语言:javascript
代码运行次数:0
运行
复制
char c = 'A';
char array[100] = "The string to be appended with ";

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

添加c变量内容的几种方法如下:

代码语言:javascript
代码运行次数:0
运行
复制
/* 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)正确地控制空格)。

代码语言:javascript
代码运行次数:0
运行
复制
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,如果数组中没有空间来打印c变量和最终的\0字符,则应该使用0,这样就可以检查操作的结果了。

备注

如果节点结构中有一个char *指针,因为您动态地分配内存来存储字符串值(例如,使用strdup(3)函数),那么就没有空间在末尾追加任何字符,因为strdup(3)只分配足够的空间来存储原始字符串的完整副本(字符,加上末尾的额外\0 )(即使该字符串最初存储在更大的字符数组中),在这种情况下,追加字符的唯一方法是分配一个足够大小的新数组,并将所有字符复制到新位置。小心,如果你在每个字符的基础上这样做,你的效率会受到严重影响。

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

https://stackoverflow.com/questions/48199297

复制
相关文章

相似问题

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