2013-08-21 29 views
-5

使用strcat函数时出现问题。我没有idea.please帮助me.thanks使用strcat与strcpy发生问题

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

你只是幸运的是,第一个案件工作。 –

+1

@Dayalrai这种“幸运”会导致卫星崩溃,并在条件改变时人们死亡。 –

+0

“幸运”是什么意思? –

回答

0

的问题,这两个版本是你写的过去dst结束。 ab都需要六个字节,包括NUL终止符; dst只有五个空间。

这导致undefined behaviour

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

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); 
} 
+0

处理'char'时,不需要'(sizeof(* dst))'; C标准明确定义了'char'的大小为1. – verbose

+0

你是对的,修正了 – Saxtheowl

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; 
    } 

OUTPUT:

# 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以及..希望你明白你的代码的目的..

+0

你确实可以使'dst'小于'15',但它应该至少有'11'个字符来解释最终的' 0' – Virgile

+0

谢谢@Virgile .. – Abhishek

+0

我的意思是当dst的大小是5时,strcat(strcpy(dst,a),b)正在工作,为什么? –