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

學無先后,達者為師

網站首頁 編程語言 正文

徹底掌握C語言strcpy函數的用法_C 語言

作者:<vince> ? 更新時間: 2022-06-29 編程語言

strcpy函數詳解如下

1.函數介紹

1.1.函數接口

char * __cdecl strcpy(char * dst, const char * src);

這里是庫函數里面的函數定義接口。該函數作用是將一組字符串復制到另一組字符串中去,就是所謂的 復制字符串函數。

1.2.函數分析

1、這里是將源字符串拷貝到目標字符串空間中去。

2、源字符串必須以 ‘/0’ 結束。

3、拷貝會將源字符串中的 ‘\0’ 拷貝進去。

4、目標空間必須足夠大,且必須可變。

圖解分析:

2.庫函數strcpy源代碼

char * __cdecl strcpy(char* dst, const char* src)
{
		char * cp = dst;
 	 	while((*cp++ = *src++) != '\0')
 				;               
 		return( dst )
 }

2.1.庫函數分析

分析:

1、 這里 dst 就是指向目標字符空間的指針,所以不能用const 修飾,必須是可變的;src 是源字符串,源字符串可以用const 修飾。

2、 這里源字符串 src 結尾必須含有 ‘\0’ ,這樣循環里的判斷條件才能成立。

3、這里*cp++ = *strc++這種寫法更加簡便,縮短代碼量。

3.模擬實現strcpy函數

3.1.模擬實現

char* my_strcpy(char* str2,const char* str1)
{
	char* first = str2;
	assert(str2 && str1);//這里注意,盡量把assert放在char* 
	//first的下一行
	//有的編譯器中若將assert放在最前面,可能無法編譯,因為C語言規定變量的常見必須放在代碼前面
	while (*str2++ = *str1++)
	{
 		 ;
	}
	return first;
}
int main(void)
{
	char ch1[] = "abcde";
	char ch2[] = "XXXXXXXXXXXX";
 	printf("%s\n", my_strcpy(ch2, ch1));//這里是鏈式訪問
	//在一個函數里面去訪問另一個函數的值,就是鏈式訪問
}

分析總結:

1、盡量不要返回局部變量的地址。(因為局部變量在函數內部使用后:在出這個函數后,其局部變量的空間就會被銷毀,就不會再指向這個函數之前使用的地址了,所以就無法訪問到之前使用的地址,就會出現非法訪問內存的錯誤)。

2、指針不知道賦什么值的時候,就給NULL。

3、指針使用完后,就給NULL。

寫在后面

友友們,相聚的時刻總是短暫的,又到了說再見的時候啦~ 但是字符串這一塊經常在面試的時候會出模擬實現某某字符串函數的面試題,因此我們不能只會平時利用頭文件直接調用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函數。

以上代碼均可運行,所用編譯環境為 vs2019 ,運行時注意加上編譯頭文件#define _CRT_SECURE_NO_WARNINGS 1

原文鏈接:https://blog.csdn.net/m0_56817529/article/details/124072530

欄目分類
最近更新