如何连接指针数组? [重复](How to concatenate pointer arrays

2019-10-29 04:03发布

可能重复:
级联用C char数组

如何连接:

char *a="abcd";
char *b="1234";

使用strcat的()? 并回答同样在用户进入*和* B?

编辑错过了这一点:不使用另一个数组。

Answer 1:

你不能用你已经初始化字符串文字猴子各地 - 他们坐在某处内存和不能/不应该被改写。

如果你不希望其他静态定义的数组,但不介意动态分配,下面的代码可以完成你在找什么:

char *a = "abcd";
char *b = "1234";
char *out;

if((out = (char *)malloc(strlen(a) + strlen(b) + 1)) != NULL)
{
   strcpy(out, a);
   strcat(out, b);
}
else
{
   //you don't have enough memory, handle it
}

如果这仍然是不可接受的,可以考虑不同的方法来初始化您的字符串文字。



Answer 2:

您需要创建一个目标位置,有足够的空间来容纳要Concat的一切。

char newchar[50];

strcpy(newchar, a); //per the comment
strcat(newchar, b);


Answer 3:

如何连接,而无需使用另一个数组

是不可能的。 a和b都仅仅是用于指向驻留在ROM中的字符串文字。 您还没有分配,你可以读取数据到任何存储。

你可以做的是这样的:

char a[9] = "abcd";
const char* b = "1234";
strcat(a, b);

在这里,您分配的内存“一”静态的9个字节,就足以把字符串结束的8个符号+ 1个字节。



Answer 4:

复制出多串的典型方法是创建一个足够大的缓冲区,复制第一个串出,然后拼接剩余的字符串一个接一个。 然而,字符串操作是往往充满漏洞 - 安全漏洞 - 你应该多加小心。

我建议你去通过这篇文章: 是strlcpy和strlcat -一致的,安全的,字符串复制和串接

编辑有关OP的编辑:

而不使用另一个数组

您没有任何阵列开始。 你有型的指针炭为只读字符串文字。 您不能修改任何字符串。 否则,调用未定义的行为。 但是,您可以阅读这些字符串复制到其他字符串(其内存你自己 - 无论是在堆栈或堆 - 从而可以修改)。



Answer 5:

编辑:下面的答案是适用的quesiton的编辑之前OP的问题。

你不能做到这一点。 但是你可以在连接字符串成一个字符数组。 你必须确保字符数组有足够的空间连接字符串。 下面是一个例子:

char *a = "abcd";
char *b = "1234";
char arr[10] = {0};

strcat(arr, a);
strcat(arr, b);
printf("%s\n", arr);

注意:为什么ARR []必须初始化为0,是你的功课。 :)



Answer 6:

我认为下面的功能应该工作

void stcat (char *str1, char *str2)
{
    int i = 0,len = 0;
    while(*(str1+len)!='\0')
    len++;
       while(*(str2+i)!='\0')
   {
           *(str1+len) = *(str2+i);
           i++;
           len++;
   }
   *(str1+len) = '\0';
}


文章来源: How to concatenate pointer arrays? [duplicate]