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


 

 

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

文字列の途中 n 文字複写:char *my_strmid(const char *src, int ix, int n)

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

解説:

 


前: | 次: