我写了以下C程序:
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
printf("%s", strcat(str1, str2));
return (EXIT_SUCCESS);
}
我想连接两个字符串,但它不起作用。
答案 0 :(得分:21)
它的工作方式是:
free (str3);
这是你玩的一个例子。它非常简单,没有硬编码长度。你可以在这里试试:http://ideone.com/d3g1xs
有关char大小的信息,请参阅this post
#include <stdio.h>
#include <memory.h>
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
char * str3 = (char *) malloc(1 + strlen(str1)+ strlen(str2) );
strcpy(str3, str1);
strcat(str3, str2);
printf("%s", str3);
return 0;
}
答案 1 :(得分:16)
Here是一个有效的解决方案:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char str1[16];
char str2[16];
strcpy(str1, "sssss");
strcpy(str2, "kkkk");
strcat(str1, str2);
printf("%s", str1);
return 0;
}
输出:
ssssskkkk
您必须为字符串分配内存。在上面的代码中,我将str1
和str2
声明为包含16个字符的字符数组。我使用strcpy
将字符串文字的字符复制到其中,并strcat
将str2
的字符附加到str1
的末尾。以下是在执行程序期间这些字符数组的外观:
After declaration (both are empty):
str1: [][][][][][][][][][][][][][][][][][][][]
str2: [][][][][][][][][][][][][][][][][][][][]
After calling strcpy (\0 is the string terminator zero byte):
str1: [s][s][s][s][s][\0][][][][][][][][][][][][][][]
str2: [k][k][k][k][\0][][][][][][][][][][][][][][][]
After calling strcat:
str1: [s][s][s][s][s][k][k][k][k][\0][][][][][][][][][][]
str2: [k][k][k][k][\0][][][][][][][][][][][][][][][]
答案 2 :(得分:3)
strcat
将str2
联合到str1
您将收到运行时错误,因为str1
未正确分配用于连接
答案 3 :(得分:2)
当您使用字符串文字(例如"this is a string"
并且在您的情况"sssss"
和"kkkk"
中)时,编译器会将它们放在只读内存中。但是,strcat
尝试在第一个参数之后写入第二个参数。您可以通过制作足够大小的目标缓冲区并写入该缓冲区来解决此问题。
char destination[10]; // 5 times s, 4 times k, one zero-terminator
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
strcpy(destination, str1);
printf("%s",strcat(destination,str2));
请注意,在最近的编译器中,您通常会收到将字符串文字转换为非常量字符指针的警告。
答案 4 :(得分:1)
strcat(str1, str2)
在str1之后追加str2。它要求str1有足够的空间来容纳str2。在你的代码中,str1和str2都是字符串常量,所以它不应该工作。你可以这样试试:
char str1[1024];
char *str2 = "kkkk";
strcpy(str1, "ssssss");
strcat(str1, str2);
printf("%s", str1);
答案 5 :(得分:1)
strcat
尝试将第二个参数附加到第一个参数。由于您要分配隐式大小的常量字符串,因此无法使用。
如果您只想打印两个字符串
printf("%s%s",str1,str2);
会这样做。
您可以执行类似
的操作char *str1 = calloc(sizeof("SSSS")+sizeof("KKKK")+1,sizeof *str1);
strcpy(str1,"SSSS");
strcat(str1,str2);
创建连接字符串;但是强烈考虑使用strncat / strncpy。并仔细阅读上面的手册页。 (哦,不要忘记最后free
str1。)