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 を引いたアドレスを返す
}
解説:
前: | 次: