程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言stringcopy()的底層實現

C語言stringcopy()的底層實現

編輯:關於C語言

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

字符串串常量的一個常見的用法就是作為函數參數,比如常見的 printf("welcome to www.bkjia.com"); 字符串參數實際上是通過字符指針訪問該字符串的。這裡的 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.bkjia.com";
	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.bkjia.com
str_b為
調用函數後
str_a為 o www.bkjia.com
str_b為 Welcome to www.bkjia.com

因為參數是通過值傳遞的,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語言程序經常采用這種寫法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved