使用带有strcpy的strcat会出现问题

时间:2013-08-21 08:09:19

标签: c strcpy strcat

使用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);

3 个答案:

答案 0 :(得分:0)

两个版本的问题在于您正在写dst的结尾。 ab都需要六个字节,包括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 ..希望你理解你的代码的目的..