char *my_strdup(const char *src) { int sz = strlen(src) + 1; // メモリ確保サイズ:文字数 + 1(1 for 終端ヌル文字) char *dst = new char[sz]; // メモリ確保 while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー } return dst - sz; // dst は sz だけ進んでいるので、sz を引いたアドレスを返す }
解説:
char *my_strdup(const char *src) { int sz = strlen(src) + 1; // メモリ確保サイズ:文字数 + 1(1 for 終端ヌル文字) char *dst = new char[sz]; // メモリ確保 char *dst0 = dst; // 先頭アドレスを保存 while( (*dst++ = *src++) != '\0' ) {// ヌル文字までコピー } return dst0; // }
前: | 次: