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
関数名:strcpy機能:シリアルコピー用法:char*strcpy(char*str 1,char*str 2);プログラム例:
C/C++ code
strdupプロトタイプ:extern char*strdup(char*s);使用法:#include
マニュアルから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
strcpystrdup , malloc (free);
strcpy , 。