strdupとstrcpyの具体的な違い


私はそれぞれXPの環境とlinuxの環境の下でCコードをコンパイルして実行して、私は1つの理解できない現象を発見します:現象の説明:2つの文字列char*from、char*to;fromの内容をtoにコピーします.XPでstrcpy(to,from)でmemory問題が発生し、to=strdup(from)に変更すると正常に動作します.linuxではto=strdup(from)でmemory問題(エラーメッセージ:*glibc detected***free():invalid next size(fast):0 x 09 a 8 d 868***が発生します.そこでstrcpy(to,from)に変えて、正常に動作します.1、私が遭遇したこのような現象をどのように説明するか、2、strdupとstrcpyの具体的な違い、および異なるオペレーティングシステムの下での使用を教えてください.ありがとうございます.
 
strdupプロトタイプ:extern char*strdup(char*s);使用法:#include機能:レプリケーション文字列sの説明:malloc()によって割り当てられ、free()によって解放される必要な空間を指すポインタを返します.例://strdup.c            #include       #include       main()      {        char *s="Golden Global View";        char *d;                clrscr();                d=strdup(s);        printf("%s",d);        getchar();        return 0;}strcpyプロトタイプ:extern char*strcpy(char*dest,char*src);使用法:#include機能:srcが指すNULLで終わる文字列をdestが指す配列にコピーします.説明:srcとdestが指すメモリ領域は重複できません.destはsrcの文字列を収容するのに十分な空間が必要です.destを指すポインタを返します.例://strcpy.c            #include       #include       main()      {        char *s="Golden Global View";        char d[20];                clrscr();                strcpy(d,s);        printf("%s",d);        getchar();        return 0;      }
 
 
マニュアルからcopyの!関数名:strdup機能:シリアルを新しい場所にコピーする方法:char*strdup(char*str);プログラム例:
C/C++ code

    
    
    
    
#include < stdio.h > #include < string .h > #include < alloc.h > int main( void ) { char * dup_str, * string = " abcde " ; dup_str = strdup( string ); printf( " %s/n " , dup_str); free(dup_str); return 0 ; }

関数名:strcpy機能:シリアルコピー用法:char*strcpy(char*str 1,char*str 2);プログラム例:
C/C++ code

    
    
    
    
#include < stdio.h > #include < string .h > int main( void ) { char string [ 10 ]; char * str1 = " abcdefghi " ; strcpy( string , str1); printf( " %s/n " , string ); return 0 ; }
strdup     c  ,  linux   !~ 
strcpy c , windows !~
strlen from , to , strcpy !~
 
 
strdup                      ,                
strcpy
  : to = strdup(from) ,     free(to) ,  
linux  c ansi c,strdup       
strdup   free        

strcpy
strdup             ,       malloc                (free); 
strcpy , 。