我编写了以下 C 程序:
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
printf("%s", strcat(str1, str2));
return (EXIT_SUCCESS);
}
我想连接两个字符串,但它不起作用。
我编写了以下 C 程序:
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
printf("%s", strcat(str1, str2));
return (EXIT_SUCCESS);
}
我想连接两个字符串,但它不起作用。
它的工作方式是:
free (str3);
这是你玩的一个例子。它非常简单,没有硬编码的长度。你可以在这里试试:http: //ideone.com/d3g1xs
有关char 大小的信息,请参阅此帖子
#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;
}
这是一个有效的解决方案:
#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][][][][][][][][][][][][][][][]
strcat
连接str2
到str1
您将收到运行时错误,因为str1
没有为连接正确分配
When you use string literals, such as "this is a string"
and in your case "sssss"
and "kkkk"
, the compiler puts them in read-only memory. However, strcat
attempts to write the second argument after the first. You can solve this problem by making a sufficiently sized destination buffer and write to that.
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));
Note that in recent compilers, you usually get a warning for casting string literals to non-const character pointers.
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 最后)。
strcat(str1, str2)
在 str1 之后附加 str2。它要求 str1 有足够的空间来容纳 str2。在您的代码中, str1 和 str2 都是字符串常量,所以它不应该工作。你可以这样试试:
char str1[1024];
char *str2 = "kkkk";
strcpy(str1, "ssssss");
strcat(str1, str2);
printf("%s", str1);