ViVi Home > 技術文書 > ポインタ入門 > 文字列関数 > strdup


 

 

C/C++ ポインタ入門 > 文字列関数 > strdup
Nobuhide Tsuda
Nov-2013

文字列複写:char *my_strdup(const char *src)

char *my_strdup(const char *src)
{
    int sz = strlen(src) + 1;       // メモリ確保サイズ:文字数 + 1(1 for 終端ヌル文字)
    char *dst = new char[sz];   // メモリ確保
    while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー
    }
    return dst - sz;    // dst は sz だけ進んでいるので、sz を引いたアドレスを返す
}

解説:

char *my_strdup(const char *src)
{
    int sz = strlen(src) + 1;       // メモリ確保サイズ:文字数 + 1(1 for 終端ヌル文字)
    char *dst = new char[sz];   // メモリ確保
    char *dst0 = dst;             // 先頭アドレスを保存
    while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー
    }
    return dst0;     // 
}

 


前: | 次: