如何连接指针数组?

可能重复:
在C中连接char数组

如何连接:

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

使用strcat()? 当用户输入* a和* b时,回答相同的问题?

EDIT错过了这个:没有使用另一个arrays。

你不能用你已经初始化的字符串文字来徘徊 – 它们位于内存中的某个位置并且不能/不应该被重写。

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

 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 } 

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

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

 char newchar[50]; strcpy(newchar, a); //per the comment strcat(newchar, b); 

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

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

你能做的是:

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

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

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

我建议你阅读这篇文章: strlcpy和strlcat – 一致,安全,字符串复制和连接

编辑OP的编辑:

不使用其他数组

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

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

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

 char *a = "abcd"; char *b = "1234"; char arr[10] = {0}; strcat(arr, a); strcat(arr, b); printf("%s\n", arr); 

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

我认为以下function应该有效

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