C/C++——庫函數strcpy和strdup比較


版權聲明:原創文章,禁止轉載。

 


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

 

 


 參考資料:

  1. https://blog.csdn.net/jinjingwen/article/details/6314750
  2. https://blog.csdn.net/koozxcv/article/details/49306751

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM