1、strdup 在 C 中的作用
strdup
函数用于创建一个给定字符串的副本。它会动态分配内存,将原字符串复制到新分配的内存中,并返回指向该新字符串的指针。
char *strdup(const char *str);
str
是指向要复制的以空字符 ('\0'
) 结尾的字符串的指针。返回值是返回一个指向新分配字符串的指针,新字符串的内容与传入的字符串相同。如果内存分配失败,则返回 NULL
。
#include <stdio.h> #include <string.h> #include <stdlib.h> // 用于 free() int main() { const char *original = "Hello, World!"; char *copy = strdup(original); if (copy == NULL) { perror("strdup 失败"); return 1; } printf("原字符串: %s\n", original); printf("复制的字符串: %s\n", copy); free(copy); // 释放分配的内存 return 0; }
2、strdup
的自定义实现
如果某些平台不支持 strdup
,可以使用 malloc
和 strcpy
自行实现。
#include <stdio.h> #include <stdlib.h> #include <string.h> char *my_strdup(const char *str) { if (str == NULL) { return NULL; } size_t len = strlen(str) + 1; // 包括空字符 char *copy = malloc(len); // 动态分配内存 if (copy != NULL) { strcpy(copy, str); // 复制字符串 } return copy; // 返回新字符串的指针 } int main() { const char *original = "Hello, World!"; char *copy = my_strdup(original); if (copy == NULL) { perror("my_strdup 失败"); return 1; } printf("原字符串: %s\n", original); printf("复制的字符串: %s\n", copy); free(copy); // 释放分配的内存 return 0; }
3、strdup 的替代方法
如不想使用 strdup
,可以使用其他标准库函数(如 malloc
和 strcpy
)手动分配和复制字符串。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { const char *original = "Hello, World!"; size_t len = strlen(original) + 1; char *copy = malloc(len); // 动态分配内存 if (copy == NULL) { perror("malloc 失败"); return 1; } strcpy(copy, original); // 复制字符串 printf("原字符串: %s\n", original); printf("复制的字符串: %s\n", copy); free(copy); // 释放分配的内存 return 0; }