使用strcat函数时遇到问题。我不知道。请帮助我。谢谢
char dst[5]="hello";
char *a = "12345";
char *b = "54321";
//work
strcat(strcpy(dst, a), b);
printf("one==%s\n",dst);
//error
strcpy(dst, a);
strcat(dst, b);
printf("two==%s\n",dst);
答案 0 :(得分:0)
两个版本的问题在于您正在写dst
的结尾。 a
和b
都需要六个字节,包括NUL终结符; dst
只有五个空间。
这会产生undefined behaviour。
未定义行为的本质是它可能会或可能不会表现出来。如果是这样,它可能是相当随意的。
答案 1 :(得分:0)
你没有在你的dst指针上正确分配你的内存,这是一个有效的代码:
int main()
{
char *dst;
char *a = strdup("12345");
char *b = strdup("54321");
dst = malloc(100);
dst = strdup("hello");
strcat(strcpy(dst, a), b);
printf("one==%s\n",dst);
strcpy(dst, a);
strcat(dst, b);
printf("two==%s\n",dst);
}
答案 2 :(得分:0)
<强>方案:强>
#include<string.h>
#include<stdio.h>
int main()
{
char dst[15]="hello";
char *a = "12345";
char *b = "54321";
//work
strcat(strcpy(dst, a), b);
printf("one==%s\n",dst);
//error
strcpy(dst, a);
strcat(dst, b);
printf("two==%s\n",dst);
return 0;
}
<强>输出:强>
# 1: hide clone input 8 seconds ago
result: success time: 0s memory: 2684 kB returned value: 0
input: no
output:
one==1234554321
two==1234554321
编辑: 而不是15你也可以使用11 ..希望你理解你的代码的目的..