C語言的strcpy函數(shù)你了解嗎
strcpy
拷貝字符串到目標(biāo)地址
函數(shù)原型
char *strcpy( char * destination, const char * source )
參數(shù)講解
參數(shù) | destination | source |
解釋 | 目標(biāo)字符串地址 | 以 Null 結(jié)尾的源字符串地址 |
返回值詳解
這些函數(shù)中的每一個都返回目標(biāo)字符串,沒有返回值就是拷貝失敗。
函數(shù)詳解
strcpy使用時幾個注意點(diǎn)
第一個注意點(diǎn):源字符串必須以‘\0’結(jié)束,同時會將源字符串中的‘\0’拷貝到目標(biāo)空間。
就是說當(dāng)我們把源字符串拷貝到目標(biāo)地址時什么時候停止呢,就是當(dāng)把源字符串中的‘\0’也拷貝過去時結(jié)束。
用以下代碼為例,就是說當(dāng)arr2中f拷貝到arr1中時,strcpy還會把a(bǔ)rr2中的‘\0’拷貝到arr1中
#include<stdio.h> #include<string.h> int main() { char arr1[8]; char arr2[] = "abcdef"; strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
而如果arr2中沒有‘\0’時,看如下圖片所示,strcpy會越界訪問直到程序崩潰!
而當(dāng)給arr2中添加'\0'時,程序就很容易就編譯過去了
所以在源地址中一定要存在'\0'
第二個注意點(diǎn):目標(biāo)空間必須足夠大,以確保能存放源字符串
假如我們把a(bǔ)rr2中的七個字符拷貝到arr1中去,遺憾的是arr1只有四個空間不夠大,這時我們還調(diào)用strcpy,就會發(fā)現(xiàn)程序崩了!
為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的??臻g被破壞了。
而作為程序員的我們,必須保證目標(biāo)空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)
第三個注意點(diǎn):目標(biāo)空間必須可變
例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把a(bǔ)rr2中的字符串拷貝到arr1中去,大家覺得結(jié)果會是什么?
#include<stdio.h> #include<string.h> int main() { char* arr1 = "qwertyuiop"; char arr2[] = "abcedf"; strcpy(arr1, arr2); printf("%s", arr1); return 0; }
看到這想必大家心理應(yīng)該都有答案了,調(diào)試一下發(fā)現(xiàn)程序又崩了!這是為什么呢?
就是因?yàn)閍rr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用strcpy是目的地必須是可修改的。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用
- C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別
- C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
- C語言 strcpy和memcpy區(qū)別詳細(xì)介紹
- C語言不使用strcpy函數(shù)如何實(shí)現(xiàn)字符串復(fù)制功能
- 徹底掌握C語言strcpy函數(shù)的用法
- 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用
- C語言strcpy庫函數(shù)詳解
- C語言中strcpy()函數(shù)的具體實(shí)現(xiàn)及注意事項(xiàng)
- C語言庫函數(shù)strcpy的使用及模擬實(shí)現(xiàn)
相關(guān)文章
C語言中qsort函數(shù)用法實(shí)例小結(jié)
這篇文章主要介紹了C語言中qsort函數(shù)用法,包括了針對各種數(shù)據(jù)類型參數(shù)的排序,非常具有實(shí)用價值,需要的朋友可以參考下2014-09-09基于MFC實(shí)現(xiàn)自定義復(fù)選框效果
復(fù)選框是一種可同時選中多項(xiàng)的基礎(chǔ)控件,主要是有兩種明顯的狀態(tài):選中與非選中。本文將通過MFC框架實(shí)現(xiàn)自定義復(fù)選框效果,感興趣的可以了解一下2022-02-02淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} $
這篇文章主要介紹了VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03C++中函數(shù)的默認(rèn)參數(shù)詳細(xì)解析
在函數(shù)聲明或定義時,直接對參數(shù)賦值,該參數(shù)就是默認(rèn)參數(shù)。在函數(shù)調(diào)用時,省略部分或全部參數(shù),這時就會使用默認(rèn)參數(shù)進(jìn)行代替2013-10-10