如何连接指针数组?

时间:2012-05-07 10:03:29

标签: c arrays pointers

  

可能重复:
  concatenate char array in C

如何连接:

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

使用strcat()?当用户输入* a和* b?

时,回答相同的问题

编辑错过了这个:没有使用其他阵列。

6 个答案:

答案 0 :(得分:3)

你不能用你已经初始化的字符串文字来徘徊 - 它们位于记忆中的某个地方。不能/不应该改写。

如果你不想要另一个静态定义的数组但不介意动态分配,下面的代码可能会完成你想要的:

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
}

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

答案 1 :(得分:1)

您需要创建一个目标位置,并留出足够的空间来容纳您要连接的所有内容。

char newchar[50];

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

答案 2 :(得分:1)

  

如何在不使用其他数组的情况下连接

这是不可能的。 a和b都只是指向驻留在ROM中的字符串文字的指针。您尚未分配任何可以读取数据的内存。

你可以做的是:

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

这里你静态地将'a'分配为RAM中的9个字节,足以容纳8个符号+ 1个字节用于字符串终止。

答案 3 :(得分:0)

编辑:以下答案适用于编辑问题之前OP的问题。

你做不到。但是您可以将字符串连接成字符数组。您必须确保字符数组有足够的空间用于连接字符串。这是一个例子:

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

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

注意:为什么arr []需要初始化为0才是你的功课。 :)

答案 4 :(得分:0)

复制多个字符串的典型方法是创建足够大的缓冲区,复制第一个字符串,然后逐个连接剩余的字符串。然而,字符串操作通常充满了错误 - 安全漏洞 - 你应该格外小心。

我建议你阅读这篇文章:strlcpy and strlcat - consistent, safe, string copy and concatenation

编辑OP的编辑:

  

不使用其他数组

您没有任何数组可供使用。你有char类型的指针只读字符串文字。您无法修改任何字符串。这样做会调用未定义的行为。但是,您可以将这些字符串读取并复制到其他字符串(您拥有的内存 - 在堆栈或堆上 - 因此可以修改)。

答案 5 :(得分:-2)

我认为以下功能应该有效

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';
}