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


 

 

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

文字列の末尾 n 文字複写:char *my_strright(const char *src, int n)

char *my_strright(const char *src, int n)
{
    const int len = strlen(src);
    n = std::min(n, len);       // src 文字数、n の小さい方を n に代入
    char *dst = new char[n + 1];   // メモリ確保
    src += len - n;		//	src をコピー開始位置に合わせる
    for(int i = 0; i < n; ++i ) {
        *dst++ = *src++;       // 文字コピー
    }
    *dst = '\0';         // 終端記号のヌル文字を忘れずに
    return dst - n;    // dst は n だけ進んでいるので、n を引いたアドレスを返す
}

解説:

char *my_strright(const char *src, int n)
{
    const int len = strlen(src);
    n = std::min(n, len);       // src 文字数、n の小さい方を n に代入
    char *dst = new char[n+1];   // メモリ確保
    char *dst0 = dst;             // 先頭アドレスを保存
    src += len - n;
    while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー
    }
    return dst0;     // アロケートしたアドレスを返す
}

 


前: | 次: