strcpy()函數詳解


strcpy()函數是C語言中的一個復制字符串的庫函數,以下將詳細解釋說明一下:

· 函數聲明以及實現代碼

char *strcpy(char *dst, const char *src);
char * strcpy(char *dst,const char *src)
{
if((dst==NULL)||(src==NULL))

return NULL;

char *ret = dst; //[1]

while ((*dst++=*src++)!='\0'); //[2]

return ret;//[3]
}
(1)const 修飾:源字符串參數用const修飾,防止修改源字符串;

(2)空指針檢查:源指針和目的指針都有可能會出現空指針的情況,所以應該對其進行檢查;

(3)為什么要設置ret 指針以及返回ret指針的位置[3],由於目的指針dst已經在進行移動了,所以用輔助指針ret表明首指針;

(4)以上所示[2]處,為簡單的字符串的復制過程,正好表明strcpy函數遇到'\0'將會停止;

· 示例說明

之前在某處看到過這個問題,以下將對其進行詳解,

· 最終答案輸出是 "ABC\0";

· 為什么答案不是"ABC\0ef";

[1]從strcpy函數的實現代碼可以看出當src指針指向為‘\0’時將會停止字符串的復制,由此可以得知返回ret指針所指向的數組a內容應該是 “ABC\0ef”,也就是說實際內存數組a中的內容應該是“ABC\0ef“;但是為什么最終顯示會是"ABC\0"呢,原因在於,strcpy的本身屬性:即strcpy只用於字符串復制,並且它不僅復制字符串內容之外,還會復制字符串的結束符;

基於此種原因,但是字符串的特性是什么呢?字符串最后一個字節存放的是一個空字符——“\0”,用來表示字符串的結束。把b復制到a之后會令b的空字符把復制后的字符串隔斷,所以最終printf輸出只能是"ABC\0";

【注】此函數的第一個屬性,會返回ret,也就是第一次,dst賦給ret的首地址,如


char *a="coda";
char b[MAX]="you are the best one.";
char *p;
p=strcpy(b+8,a);
puts(p);

輸出結果為:coda
可能到這里你已經發現了一些問題,如果想把一個字符串的一部分復制到另一個字符串的某個位置,該怎么辦呢,顯然strcpy()函數是滿足不了這個功能的,strncpy()函數是為了彌補strcpy()函數不能檢查目標字符串是否容納下源字符串的不足而設定的一個函數。並且完全可以實現這個功能。

以上如果有錯誤,還請提出。
————————————————
版權聲明:本文為CSDN博主「coddM」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/okawari_richi/article/details/57411796


免責聲明!

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



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