まず、my_strdup関数の定義を見てみましょう。
char *my_strdup(const char *src);
この関数は、与えられた文字列srcのコピーを新たなメモリ領域に作成し、そのコピーへのポインタを返します。つまり、元の文字列の内容を変更せずに新たな文字列を作成することができます。
my_strdup関数を実装するには、以下の手順を経ます。
-
元の文字列srcの長さを取得します。これには、strlen関数を使用します。
-
srcの長さを使用して、新たなメモリ領域を確保します。これには、malloc関数を使用します。
-
srcの内容を新たに確保したメモリ領域にコピーします。これには、strcpy関数を使用します。
-
新たなメモリ領域へのポインタを返します。
以下に、my_strdup関数の実装例を示します。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *my_strdup(const char *src) {
size_t len = strlen(src);
char *new_str = (char *)malloc((len + 1) * sizeof(char));
if (new_str == NULL) {
fprintf(stderr, "メモリの割り当てに失敗しました。\n");
return NULL;
}
strcpy(new_str, src);
return new_str;
}
int main() {
const char *original = "Hello, world!";
char *duplicate = my_strdup(original);
if (duplicate != NULL) {
printf("元の文字列: %s\n", original);
printf("コピーされた文字列: %s\n", duplicate);
free(duplicate); // メモリの解放
}
return 0;
}
この例では、my_strdup関数を使用して元の文字列をコピーし、新たな文字列を作成しています。作成された文字列は、元の文字列と同じ内容を持ちますが、別のメモリ領域に保存されています。最後に、不要になったメモリを解放するために、free関数を使用しています。
以上が、my_strdup関数の実装と使用方法についての解説です。メモリ管理と文字列操作は、プログラミングにおいて頻繁に使用されるテクニックなので、しっかりと理解しておくことが重要です。