天天看點

string庫之模拟實作strcpy與strncpy

原型:

     C庫string.h中strcpy函數

描述:

     C 庫函數 char *strcpy(char *dest, const char *src) 把 src 所指向的字元串複制到 dest。

參數:

    dest指向用于存儲複制内容的目标數組。src指向要複制的字元串。

傳回值:

    傳回一個指向最終的目标字元串dest的指針。

模拟實作strcpy:

char *my_strcpy(char *dest, const char *src)
{
	char *start= dest;

	assert(NULL != dest);
	assert(NULL != src);

	while (*dest++ = *src++)//一直向後移動,當*src指向'\0'停止。
		;

	return start;
}
           

原型:

    C庫函數string.h中strncpy函數

描述:

    C 庫函數 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字元串複制到 dest,最多複制 n 個字元。當 src 的長度小于 n 時,dest 的剩餘部分将用空位元組       填充。

參數:

    dest:指向用于存儲複制内容的目标數組。

    src:指向要複制的字元串。

    n:要從源中複制的字元數。

傳回值:

    傳回一個指向最終的目标字元串dest的指針。

模拟實作strncpy:

char *my_strncpy (char * dest, const char * src, size_t n)
{
        char *start = dest;	//儲存dest值,在函數結束後傳回

        while (n && (*dest++ = *src++))//一直拷貝,直到n為0或src全部拷貝完畢
			n--;

        if (n)            //如果count>0,表示src長度小于等于n,需要給dest添加空位元組
			while (--n) //使用前置--,是因為在跳出while循環後,count少減一次
					*dest++ = '\0';

        return start;
}
           

繼續閱讀