使用 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);
两个版本的问题是你写的dst
. 两者都a
需要b
6 个字节,包括 NUL 终止符;dst
只有五个空间。
这会导致未定义的行为。
未定义行为的本质是它可能会或可能不会表现出来。如果是这样,它可能是以相当任意的方式。
您没有在 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);
}
程序:
#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
编辑:您也可以使用 11 而不是 15 ..希望您了解代码的目的..