C語言的strcpy函數(shù)你了解嗎
strcpy
拷貝字符串到目標地址
函數(shù)原型
char *strcpy( char * destination, const char * source )
參數(shù)講解
參數(shù) | destination | source |
解釋 | 目標字符串地址 | 以 Null 結尾的源字符串地址 |
返回值詳解
這些函數(shù)中的每一個都返回目標字符串,沒有返回值就是拷貝失敗。
函數(shù)詳解
strcpy使用時幾個注意點
第一個注意點:源字符串必須以‘\0’結束,同時會將源字符串中的‘\0’拷貝到目標空間。
就是說當我們把源字符串拷貝到目標地址時什么時候停止呢,就是當把源字符串中的‘\0’也拷貝過去時結束。
用以下代碼為例,就是說當arr2中f拷貝到arr1中時,strcpy還會把arr2中的‘\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會越界訪問直到程序崩潰!
而當給arr2中添加'\0'時,程序就很容易就編譯過去了
所以在源地址中一定要存在'\0'
第二個注意點:目標空間必須足夠大,以確保能存放源字符串
假如我們把arr2中的七個字符拷貝到arr1中去,遺憾的是arr1只有四個空間不夠大,這時我們還調用strcpy,就會發(fā)現(xiàn)程序崩了!
為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的棧空間被破壞了。
而作為程序員的我們,必須保證目標空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)
第三個注意點:目標空間必須可變
例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把arr2中的字符串拷貝到arr1中去,大家覺得結果會是什么?
#include<stdio.h> #include<string.h> int main() { char* arr1 = "qwertyuiop"; char arr2[] = "abcedf"; strcpy(arr1, arr2); printf("%s", arr1); return 0; }
看到這想必大家心理應該都有答案了,調試一下發(fā)現(xiàn)程序又崩了!這是為什么呢?
就是因為arr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用strcpy是目的地必須是可修改的。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
- 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用
- C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別
- C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
- C語言 strcpy和memcpy區(qū)別詳細介紹
- C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復制功能
- 徹底掌握C語言strcpy函數(shù)的用法
- 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用
- C語言strcpy庫函數(shù)詳解
- C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項
- C語言庫函數(shù)strcpy的使用及模擬實現(xiàn)
相關文章
淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} $
這篇文章主要介紹了VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03