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

學無先后,達者為師

網站首頁 編程語言 正文

C語言的strcpy函數你了解嗎_C 語言

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

strcpy

拷貝字符串到目標地址

函數原型

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

參數講解

參數 destination source
解釋 目標字符串地址 以 Null 結尾的源字符串地址

返回值詳解

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

函數詳解

strcpy使用時幾個注意點

?第一個注意點:源字符串必須以‘\0’結束,同時會將源字符串中的‘\0’拷貝到目標空間。

就是說當我們把源字符串拷貝到目標地址時什么時候停止呢,就是當把源字符串中的‘\0’也拷貝過去時結束。

用以下代碼為例,就是說當arr2中f拷貝到arr1中時,strcpy還會把arr2中的‘\0’拷貝到arr1中

#include
#include
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,就會發現程序崩了!

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

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

第三個注意點:目標空間必須可變

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

#include
#include
int main()
{
	char* arr1 = "qwertyuiop";
	char arr2[] = "abcedf";
	strcpy(arr1, arr2);
 
	printf("%s", arr1);
	return 0;
}

看到這想必大家心理應該都有答案了,調試一下發現程序又崩了!這是為什么呢?

?就是因為arr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用strcpy是目的地必須是可修改的。

總結

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

欄目分類
最近更新