C語言stringcopy()的底層實現

C 程序設計:字符串復制
服務器君一共花費了171.682 ms進行了6次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

字符串常量實際上是個字符數組,比如 welcome to www.snpmgr.live 就是個字符數組,并且以 '\0' 結尾。

字符串串常量的一個常見的用法就是作為函數參數,比如常見的 printf("welcome to www.snpmgr.live"); 字符串參數實際上是通過字符指針訪問該字符串的。這里的 printf() 函數接受的是一個指向字符數組第一個字符的指針。字符串常量是可以通過指向其第一個元素的指針來訪問的。

下面程序中的函數 stringcopy(char *source, char *target) 實現的功能是,把指針 target 指向的字符串復制到指針 source 指向的位置。

#include <stdio.h>
void stringcopy(char *source, char *target);
int main()
{
	char str_a[] = "Welcome to www.snpmgr.live";
	char str_b[] = "";
	int wait;
	printf("str_a為 %s \n", str_a);
	printf("str_b為 %s \n", str_b);
	stringcopy(str_b, str_a);
	
	printf("調用函數后 \n");
	printf("str_a為 %s \n", str_a);
	printf("str_b為 %s \n", str_b);
	scanf("%d", &wait);
}
void stringcopy(char *source, char *target)
{
	int i;
	i = 0;
	while((source[i] = target[i]) != '\0')
		i++;
}

程序運行結果:

str_a為 Welcome to www.snpmgr.live
str_b為
調用函數后
str_a為 o www.snpmgr.live
str_b為 Welcome to www.snpmgr.live

因為參數是通過值傳遞的,source 和 target 在循環中每執行一次,它們就沿著相應的數組前進一個字符,直到將 targrt 中的結束符 '\0' 復制到 source 為止。

經驗豐富的程序員則喜歡像下面那樣寫:

void stringcopy(char *source, char *target)
{
	while((*source++ = *target++) != '\0')
		;
}

在這個函數中,source 和 target 的自增運算放到了循環的測試部分。

可以進一步精煉程序,表達式同 '\0' 的比較是多余的,只需要判斷表達式的值是否為0即可。

void stringcopy(char *source, char *target)
{
	while(*source++ = *target++)
		;
}

這樣的寫法看起來不容易理解,但這種寫法是有其好處,C語言程序經常采用這種寫法。

本文地址:http://www.snpmgr.live/librarys/veda/detail/484,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/484

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《Python學習手冊(第4版)》 魯特茲(Mark Lutz) (作者), 李軍 (譯者), 劉紅偉 (譯者), 等 (譯者)

《Python學習手冊(第4版)》學習Python的主要內建對象類型:數字、列表和字典。使用Python語句創建和處理對象,并且學習Python的通用語法模型。使用函數構造和重用代碼,函數是Python的基本過程工具。學習Python模塊:封裝語句、函數以及其他工具,以便構建較大的組件。學習Python的面向對象編程工具,用于組織程序代碼。學習異常處理模型,以及用于編寫較大程序的開發工具。了解高級Python工具,如裝飾器、描述器、元類和Unicode處理等。

更多計算機寶庫...

燃烧吧足球登陆