徹底掌握C語(yǔ)言strcpy函數(shù)的用法
strcpy函數(shù)詳解如下
1.函數(shù)介紹
1.1.函數(shù)接口
char * __cdecl strcpy(char * dst, const char * src);
這里是庫(kù)函數(shù)里面的函數(shù)定義接口。該函數(shù)作用是將一組字符串復(fù)制到另一組字符串中去,就是所謂的 復(fù)制字符串函數(shù)。
1.2.函數(shù)分析
1、這里是將源字符串拷貝到目標(biāo)字符串空間中去。
2、源字符串必須以 ‘/0’ 結(jié)束。
3、拷貝會(huì)將源字符串中的 ‘\0’ 拷貝進(jìn)去。
4、目標(biāo)空間必須足夠大,且必須可變。
圖解分析:

2.庫(kù)函數(shù)strcpy源代碼
char * __cdecl strcpy(char* dst, const char* src)
{
char * cp = dst;
while((*cp++ = *src++) != '\0')
;
return( dst )
}2.1.庫(kù)函數(shù)分析
分析:
1、 這里 dst 就是指向目標(biāo)字符空間的指針,所以不能用const 修飾,必須是可變的;src 是源字符串,源字符串可以用const 修飾。
2、 這里源字符串 src 結(jié)尾必須含有 ‘\0’ ,這樣循環(huán)里的判斷條件才能成立。
3、這里*cp++ = *strc++這種寫(xiě)法更加簡(jiǎn)便,縮短代碼量。
3.模擬實(shí)現(xiàn)strcpy函數(shù)
3.1.模擬實(shí)現(xiàn)
char* my_strcpy(char* str2,const char* str1)
{
char* first = str2;
assert(str2 && str1);//這里注意,盡量把a(bǔ)ssert放在char*
//first的下一行
//有的編譯器中若將assert放在最前面,可能無(wú)法編譯,因?yàn)镃語(yǔ)言規(guī)定變量的常見(jiàn)必須放在代碼前面
while (*str2++ = *str1++)
{
;
}
return first;
}
int main(void)
{
char ch1[] = "abcde";
char ch2[] = "XXXXXXXXXXXX";
printf("%s\n", my_strcpy(ch2, ch1));//這里是鏈?zhǔn)皆L問(wèn)
//在一個(gè)函數(shù)里面去訪問(wèn)另一個(gè)函數(shù)的值,就是鏈?zhǔn)皆L問(wèn)
}分析總結(jié):
1、盡量不要返回局部變量的地址。(因?yàn)榫植孔兞吭诤瘮?shù)內(nèi)部使用后:在出這個(gè)函數(shù)后,其局部變量的空間就會(huì)被銷毀,就不會(huì)再指向這個(gè)函數(shù)之前使用的地址了,所以就無(wú)法訪問(wèn)到之前使用的地址,就會(huì)出現(xiàn)非法訪問(wèn)內(nèi)存的錯(cuò)誤)。
2、指針不知道賦什么值的時(shí)候,就給NULL。
3、指針使用完后,就給NULL。
寫(xiě)在后面
友友們,相聚的時(shí)刻總是短暫的,又到了說(shuō)再見(jiàn)的時(shí)候啦~ 但是字符串這一塊經(jīng)常在面試的時(shí)候會(huì)出模擬實(shí)現(xiàn)某某字符串函數(shù)的面試題,因此我們不能只會(huì)平時(shí)利用頭文件直接調(diào)用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函數(shù)。
以上代碼均可運(yùn)行,所用編譯環(huán)境為 vs2019 ,運(yùn)行時(shí)注意加上編譯頭文件#define _CRT_SECURE_NO_WARNINGS 1
到此這篇關(guān)于徹底掌握C語(yǔ)言strcpy函數(shù)的用法的文章就介紹到這了,更多相關(guān)C語(yǔ)言strcpy函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解C語(yǔ)言中strcpy()函數(shù)與strncpy()函數(shù)的使用
- C語(yǔ)言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別
- C語(yǔ)言中字符串常用函數(shù)strcat與strcpy的用法介紹
- C語(yǔ)言 strcpy和memcpy區(qū)別詳細(xì)介紹
- C語(yǔ)言不使用strcpy函數(shù)如何實(shí)現(xiàn)字符串復(fù)制功能
- 詳解c語(yǔ)言中的 strcpy和strncpy字符串函數(shù)使用
- C語(yǔ)言的strcpy函數(shù)你了解嗎
- C語(yǔ)言strcpy庫(kù)函數(shù)詳解
- C語(yǔ)言中strcpy()函數(shù)的具體實(shí)現(xiàn)及注意事項(xiàng)
- C語(yǔ)言庫(kù)函數(shù)strcpy的使用及模擬實(shí)現(xiàn)
相關(guān)文章
c++的glog與spdlog的性能對(duì)比測(cè)試分析
這篇文章主要為大家介紹了c++的glog與spdlog的性能對(duì)比測(cè)試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
C語(yǔ)言中實(shí)現(xiàn)KMP算法的實(shí)例講解
KMP算法即字符串匹配算法,C語(yǔ)言中KMP可以避免指針回溯從而達(dá)到高效,接下來(lái)就來(lái)總結(jié)一下C語(yǔ)言中實(shí)現(xiàn)KMP算法的實(shí)例講解2016-06-06
基于MFC實(shí)現(xiàn)單個(gè)文檔的文件讀寫(xiě)
這篇文章主要為大家詳細(xì)介紹了如何基于MFC實(shí)現(xiàn)單個(gè)文檔的文件讀寫(xiě)功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,感興趣的可以了解一下2022-07-07
C語(yǔ)言位段(位域)機(jī)制結(jié)構(gòu)體的特殊實(shí)現(xiàn)及解析
這篇文章主要為大家介紹了C語(yǔ)言位段位域機(jī)制結(jié)構(gòu)體的特殊實(shí)現(xiàn)講解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-02-02
C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解
這篇文章主要詳細(xì)介紹了C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實(shí)用,有需要的小伙伴可以參考下2015-03-03
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析的相關(guān)資料,需要的朋友可以參考下2017-03-03
PyQt5利用Qt Designer實(shí)現(xiàn)簡(jiǎn)單界面交互
本文主要介紹了PyQt5利用Qt Designer實(shí)現(xiàn)簡(jiǎn)單界面交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03

