版權聲明:原創文章,禁止轉載。
1. strcpy
原型: extern char *strcpy(char *dest,char *src);
用法: #include <string.h>
功能:把src所指由 '\0' 結束的字符串復制到dest所指的字符數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。 返回指向dest的指針。
舉例:
#include <string.h>
#include <stdio.h>
int main(void) { char *src="Hello C!"; char dest[10]; strcpy(dest,src); printf("%s\n",dest); return 0; }
輸出:
2. strdup
原型: extern char *strdup(char *s);
用法: #include <string.h>
功能:復制字符串s
說明:返回指向被復制的字符串的指針,所需空間由malloc()分配且可以由free()釋放。
舉例:
#include <string.h> #include <stdio.h> #include <stdlib.h> int main(void) { char *src = "Hello C!"; char *dest = strdup(src); printf("%s\n",dest); free(dest); return 0; }
輸出:
3. strcpy和strdup比較
-
strdup不是標准的c函數,strcpy是標准的c函數,使用時注意場合;
-
strdup可以直接把要復制的內容復制給沒有初始化的指針,因為它會自動分配空間給目的指針,strcpy的目的指針一定是已經分配內存的指針;
-
strdup用完要free()函數釋放內存,否則內存泄露;
-
使用strcpy必須事先確定src大小,可以先strlen判斷src的大小,之后為dest申請空間(dest的空間不小於strlen(src)+1),之后再strcpy就不會有問題了。
strdup可以由strcpy實現如下:
char *strdup(const char *s) { char *t = NULL; if(s && (t = (char*)malloc((strlen(s)+1))) { strcpy(t, s); } return t; }
參考資料:
- https://blog.csdn.net/jinjingwen/article/details/6314750
- https://blog.csdn.net/koozxcv/article/details/49306751