文字列をコピーしてポインタを返す_strdup関数

値を単なるポインタで渡すと元の値を変更したときに、書き換わってしまうのでデータを保存しておくためには新しく割り当てたポインタを保持する必要がある。

それをやってくれるのが_strdup関数

#include <stdio.h>
#include <string.h>

int main (void) {
    char *p;
    char str[] = "abced";

    p = _strdup(str);
    str[0] = 'z'; // strを書き換えてもpには影響しない

    printf("%s\n",str);
    printf("%s\n",p);
}
$ main
zbced
abced

_strdupの実装は結局引数で受け取った文字列の長さ分のメモリをmallocで確保してそこに文字列をコピーして返してるだけの単純なもの。

凄く便利。

でもなんでアンダーバー付きの関数名なんだろうか。strdupでいいと思うんだけど。