日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

C語言的strcpy函數(shù)你了解嗎_C 語言

作者:威威沁沁 ? 更新時間: 2022-05-24 編程語言

strcpy

拷貝字符串到目標(biāo)地址

函數(shù)原型

char?*strcpy(?char?*?destination,?const?char?*?source?)

參數(shù)講解

參數(shù) destination source
解釋 目標(biāo)字符串地址 以 Null 結(jié)尾的源字符串地址

返回值詳解

這些函數(shù)中的每一個都返回目標(biāo)字符串,沒有返回值就是拷貝失敗。

函數(shù)詳解

strcpy使用時幾個注意點

?第一個注意點:源字符串必須以‘\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
#include
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'

第二個注意點:目標(biāo)空間必須足夠大,以確保能存放源字符串

假如我們把a(bǔ)rr2中的七個字符拷貝到arr1中去,遺憾的是arr1只有四個空間不夠大,這時我們還調(diào)用strcpy,就會發(fā)現(xiàn)程序崩了!

?為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的??臻g被破壞了。

而作為程序員的我們,必須保證目標(biāo)空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)

第三個注意點:目標(biāo)空間必須可變

例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把a(bǔ)rr2中的字符串拷貝到arr1中去,大家覺得結(jié)果會是什么?

#include
#include
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é)

原文鏈接:https://blog.csdn.net/weixin_53564801/article/details/123618989

欄目分類
最近更新