C/C++ ポインタ入門 > 文字列関数 > strleft
Nobuhide Tsuda
Nov-2013
文字列の先頭 n 文字複写:char *my_strleft(const char *src, int n)
char *my_strleft(const char *src, int n)
{
n = std::min(n, (int)strlen(src)); // src 文字数、n の小さい方を n に代入
char *dst = new char[n + 1]; // メモリ確保
for(int i = 0; i < n; ++i ) {
*dst++ = *src++; // 文字コピー
}
*dst = '\0'; // 終端記号のヌル文字を忘れずに
return dst - n; // dst は n だけ進んでいるので、n を引いたアドレスを返す
}
解説:
- 最初にn と strlen(src) を比較し、小さい方を n に代入します。
- new char[n + 1] でそのバイト数のメモリをアロケートし、dst に設定します。
- while 文で、ポインタをインクリメントしながら、ヌル文字までコピーします。
- 最後に、アロケートしたアドレスを返します。
- アロケートするバイト数は、ヌル文字の分が必要なので、文字数 + 1 であることに注意してください。
- 最後に返すのはアロケートしたアドレスで、コピーによりポインタが進んでしまっているので、- n するのが肝心です。
前:
| 次: