可能重复:
在 C 中连接 char 数组
如何连接:
char *a="abcd";
char *b="1234";
使用 strcat()?当用户输入 *a 和 *b 时回答相同?
编辑错过了这一点:不使用另一个数组。
可能重复:
在 C 中连接 char 数组
如何连接:
char *a="abcd";
char *b="1234";
使用 strcat()?当用户输入 *a 和 *b 时回答相同?
编辑错过了这一点:不使用另一个数组。
您不能随意使用您已经初始化的字符串文字 - 它们位于内存中的某个位置并且不能/不应该被重写。
如果您不想要另一个静态定义的数组但不介意动态分配,下面的代码可能会完成您正在寻找的内容:
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 个字节用于字符串终止。
编辑:以下答案适用于编辑问题之前的 OP 问题。
你不能那样做。但是您可以将字符串连接成一个字符数组。您必须确保字符数组有足够的空间用于连接字符串。这是一个例子:
char *a = "abcd";
char *b = "1234";
char arr[10] = {0};
strcat(arr, a);
strcat(arr, b);
printf("%s\n", arr);
注意:为什么 arr[] 需要初始化为 0 是你的功课。:)
复制多个字符串的典型方法是创建一个足够大的缓冲区,将第一个字符串复制出来,然后将剩余的字符串一个接一个地连接起来。然而,字符串操作经常充满错误——安全漏洞——你应该格外小心。
我建议你阅读这篇文章:strlcpy 和 strlcat - 一致、安全、字符串复制和连接
编辑关于 OP 的编辑:
不使用另一个数组
您没有任何数组开始。您有指向只读字符串文字的 char 类型的指针。您不能修改任何一个字符串。这样做会调用未定义的行为。但是,您可以读取这些字符串并将其复制到其他字符串(您拥有的内存——在堆栈上或堆上——因此可以修改)。
我认为以下功能应该可以工作
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';
}