-5

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

3 回答 3

1

两个版本的问题是你写的dst. 两者都a需要b6 个字节,包括 NUL 终止符;dst只有五个空间。

这会导致未定义的行为

未定义行为的本质是它可能会或可能不会表现出来。如果是这样,它可能是以相当任意的方式。

于 2013-08-21T08:10:52.520 回答
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);
}
于 2013-08-21T08:18:15.853 回答
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

编辑:您也可以使用 11 而不是 15 ..希望您了解代码的目的..

于 2013-08-21T08:23:12.640 回答