首頁 > 軟體

C語言 模擬實現strcpy與strcat函數詳解

2022-04-08 19:00:27

這裡有超詳細的函數模實現分享,帶大家一起來模擬實現這些函數,後續還將更新更多的函數模擬實現的文章。

一、strcpy函數的介紹

1.函數的宣告

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

2.函數功能與注意事項

  • 將源指向的字串複製到目標指向的陣列中,包括終止空字元(並在該點停止)。
  • 源字串必須以 '' 結束。
  • 會將源字串中的 '' 拷貝到目標空間。
  • 目標空間必須足夠大,以確保能存放源字串。
  • 目標空間必須可變。

3.函數的使用

#include<stdio.h>
#include<string.h>//使用strcpy函數時記得參照它的標頭檔案
 
int main()
{
	char ch1[7] = "abcdef";
	char ch2[10];//ch2為目標陣列,空間必須比ch1大
	strcpy(ch2, ch1);
	printf("%sn", ch2);
	return 0;
}

執行結果

二、模擬實現strcpy函數

1.模擬分析

1.我們需要將源指向的字串複製到目標指向的陣列中,包括終止空字元,所以我們就可以一個字元一個字元的複製過去,注意終止空字元''也要複製過去,如果沒有將‘’複製過去的話,後面如果想要列印將這個賦值過去的字串的話就會出現問題。

2.因為我們源指向的字串是不需要改變的,所以我們需要將我們源指向的字串用const限制,以防它被改變,讓其變得更安全。

3.為了避免傳進來的地址是空指標,我們需要用assert來斷言傳進來的地址不是空指標。

4.為了實現鏈式存取,我們要將傳進來的目標起始地址(destination)返回。由於這個函數在執行的時候會改變destination儲存的內容,所以我們要重新建立一個char*型別的指標來儲存這個地址。

2.模擬實現

下面程式碼有點幹,需要細品,建議收藏以免忘記。

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char ch1[7] = "abcdef";
	char ch2[10];//ch2為目標陣列,空間必須比ch1大
	my_strcpy(ch2, ch1);//將ch1中的字串複製到ch2中
	printf("%sn", my_strcpy(ch2, ch1));//鏈式存取
	return 0;
}

執行結果

三、strcat函數的介紹

1.函數的宣告

char * strcat ( char * destination, const char * source );

2.函數功能與注意事項

  • 將源字串追加到目標字串。目標字串的終止空字元''被源字串的第一個字元覆蓋,幷包含一個終止空字元''在新字串的末尾,由兩者在目的地連線而成。
  • 源字串必須以 '' 結束。
  • 目標空間必須有足夠的大,能容納下源字串的內容。
  • 目標空間必須可修改。 

3.函數的使用

#include<stdio.h>
#include<string.h>//使用strcat函數時記得參照它的標頭檔案
 
int main()
{
	char ch1[4] = "def";
	char ch2[7] = "abc"; //ch2為目標陣列,空間必須比ch1大
	strcat(ch2, ch1); //將ch1中的字串追加到ch2中
	printf("%s", ch2);
	return 0;
}

執行結果

四、模擬實現strcat函數

1.模擬分析

1.我們追加字串時是將源字串追加到目標字串裡面,我們需要將從目標字串裡面''的位置開始追加,所以我們首先就需要找到目標字串中''的位置。並且我們追加完後需要在字串的追後多追加一個'',使這個新字串完整。

2.因為我們源指向的字串是不需要改變的,所以我們需要將我們源指向的字串用const限制,以防它被改變,讓其變得更安全。

3.為了避免傳進來的地址是空指標,我們需要用assert來斷言傳進來的地址不是空指標。

4.為了實現鏈式存取,我們要將傳進來的目標起始地址(destination)返回。由於這個函數在執行的時候會改變destination儲存的內容,所以我們要重新建立一個char*型別的指標來儲存這個地址。

2.模擬實現

#include<stdio.h>
#include<assert.h>
 
char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);//斷言傳進來的地址不是空指標
	char* ret = dest;//儲存目標起始地址
	while (*dest)//找到''的地址
	{
		dest++;
	}
	while (*dest++ = *src++)//追加字串
	{
		;
	}
	return ret;
}
int main()
{
	char ch1[4] = "def";
	char ch2[7] = "abc"; //ch2為目標陣列,空間必須比ch1大
	printf("%sn", my_strcat(ch2, ch1));//鏈式存取
	return 0;
}

執行結果

總結

這就是今天的全部內容了,要是大家覺得有用的話記得給博主一個三連哦,嘻嘻。最後祝考研的同學都能上岸,找工作的同學都能進大廠。

到此這篇關於C語言 模擬實現strcpy與strcat函數詳解的文章就介紹到這了,更多相關C語言 strcpy函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com