我需要在链接列表中添加一个数组,并在链接列表中添加一个数组的单个字符。我试了一下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
当我运行程序的时候,程序就停止了,它不能继续了。
发布于 2018-01-11 01:31:41
没有办法在C中追加数组,因为每个定义都是固定的(在编译时)相同类型元素的列表是连续存储的。只有在数组大小足够大的情况下,才能通过将\0
字符进一步移动一个位置(如果数组中有更多字符的位置)并将所需字符放在它前面,就可以追加一个字符串(它是通过在有效字符列表末尾追加一个\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
,如果数组中没有空间来打印c
变量和最终的\0
字符,则应该使用0
,这样就可以检查操作的结果了。
备注
如果节点结构中有一个char *
指针,因为您动态地分配内存来存储字符串值(例如,使用strdup(3)
函数),那么就没有空间在末尾追加任何字符,因为strdup(3)
只分配足够的空间来存储原始字符串的完整副本(字符,加上末尾的额外\0
)(即使该字符串最初存储在更大的字符数组中),在这种情况下,追加字符的唯一方法是分配一个足够大小的新数组,并将所有字符复制到新位置。小心,如果你在每个字符的基础上这样做,你的效率会受到严重影响。
https://stackoverflow.com/questions/48199297
复制相似问题