C語言的strcpy函數(shù)你了解嗎
strcpy
拷貝字符串到目標地址

函數(shù)原型
char *strcpy( char * destination, const char * source )
參數(shù)講解
| 參數(shù) | destination | source |
| 解釋 | 目標字符串地址 | 以 Null 結(jié)尾的源字符串地址 |
返回值詳解
這些函數(shù)中的每一個都返回目標字符串,沒有返回值就是拷貝失敗。
函數(shù)詳解
strcpy使用時幾個注意點
第一個注意點:源字符串必須以‘\0’結(jié)束,同時會將源字符串中的‘\0’拷貝到目標空間。
就是說當我們把源字符串拷貝到目標地址時什么時候停止呢,就是當把源字符串中的‘\0’也拷貝過去時結(jié)束。
用以下代碼為例,就是說當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只有四個空間不夠大,這時我們還調(diào)用strcpy,就會發(fā)現(xiàn)程序崩了!

為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的??臻g被破壞了。
而作為程序員的我們,必須保證目標空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)
第三個注意點:目標空間必須可變
例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把arr2中的字符串拷貝到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)程序又崩了!這是為什么呢?
就是因為arr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用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ū)別詳細介紹
- C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復(fù)制功能
- 徹底掌握C語言strcpy函數(shù)的用法
- 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用
- C語言strcpy庫函數(shù)詳解
- C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項
- C語言庫函數(shù)strcpy的使用及模擬實現(xiàn)
相關(guān)文章
C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例
這篇文章主要介紹了C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下2017-06-06
c++獲取sqlite3數(shù)據(jù)庫表中所有字段的方法小結(jié)
本文給大家分享c++獲取sqlite3數(shù)據(jù)庫表中所有字段的三種常用方法,本文針對每一種方法給大家詳細介紹,需要的的朋友通過本文一起學(xué)習(xí)吧2016-11-11
C/C++通過SQLite SDK實現(xiàn)數(shù)據(jù)庫增刪改查操作
SQLite,作為一款嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),一直以其輕量級、零配置以及跨平臺等特性而備受青睞,本文主要介紹了C++如何通過SQLite SDK實現(xiàn)數(shù)據(jù)庫增刪改查操作,感興趣的可以了解下2023-11-11

