C/C++ ポインタ入門 > 文字列関数 > strdup2
Nobuhide Tsuda
Nov-2013
文字列複写:char *my_strdup2(const char *src)
char *my_strdup2(const char *src)
{
int sz = strlen(src) * 2 + 1; // メモリ確保サイズ:文字数 * 2 + 1(1 for 終端ヌル文字)
char *dst = new char[sz]; // メモリ確保
while( (*dst++ = *src) != '\0' ) {// ヌル文字までコピー
*dst++ = *src++; // もう1文字コピー
}
return dst - sz; // dst は sz だけ進んでいるので、sz を引いたアドレスを返す
}
解説:
- 最初に strlen(src) * 2 + 1 でアロケートすべきバイト数を計算します。
- new char[sz] でそのバイト数のメモリをアロケートし、dst に設定します。
- while 文で、ポインタをインクリメントしながら、2文字一度にヌル文字までコピーします。
- 最後に、アロケートしたアドレスを返します。
- アロケートするバイト数は、ヌル文字の分が必要なので、文字数 + 1 であることに注意してください。
- 最後に返すのはアロケートしたアドレスで、コピーによりポインタが進んでしまっているので、- sz するのが肝心です。
前:
| 次: