天天看點

C語言字元串拷貝

#include "stdafx.h"

using namespace std;

/*

 * 說明:字元串拷貝版本1

 * 參數:dest目标位址,src源位址

 * 傳回:傳回拷貝好的位址;如果出錯或者有重疊,無定義

 * 異常:可能出現字元串溢出,及dest所占空間不如src所占空間大。

 */

char *strcpy_v1(char *dest , const char *src)

{

    //調試時,使用斷言,入口檢測

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

    //注意這裡的記憶體指向參數dest所在的記憶體,不是棧記憶體,因而可以在函數中傳回

    char *to = dest;

    //主要操作在while條件中完成

    while( (*dest++ = *src++)!='\0')

    {

        NULL;    

    }

    //傳回拷貝字元串首位址,友善連綴,比如strlen(strcpy(dest,"hello"))

    return to;

}

 * 說明:字元串拷貝版本2

 * 傳回:傳回拷貝好的位址;如果出錯,無定義

char *strcpy_v2(char *dest , const char *src)

    char *d = dest;

    char c;

    while((c=*src++) != '\0')

        *(dest++)=c;

    *dest='\0';

    return d;

 * 說明:字元串拷貝版本2(你能找出錯誤的原因嗎)

char *strcpy_v2_error(char *dest , const char *src)

        *(d++)=c;

    *d='\0';

 * 說明:字元串拷貝版本3

char *strcpy_v3(char *dest , const char *src)

    while(*src)

        *dest++ = *src++;

 * 說明:字元串拷貝版本4

char *strcpy_v4(char *dest , const char *src)

    while( (*dest = *src)!='\0')

        src++;

        dest++; 

 * 說明:字元串拷貝版本5

 * 異常:可能出現字元串溢出,及dest所占空間不如src所占空間大。restrict關鍵字限定字元串不能重疊。

char *strcpy_v5(char* _restrict dest , const char* _restrict src)

 * 說明:字元串拷貝版本6

char *strcpy_v6(char* _restrict dest , const char* _restrict src)

    while(*dest++=*src++); 

本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366256,如需轉載請自行聯系原作者

繼續閱讀