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