阿杰,我给你整理一份 strdup
函数详解,包括概念、用法、返回值、注意事项和示例。
一、概念
- 函数原型(C 标准库):
char *strdup(const char *s);
- 作用:复制一个字符串
s
并在堆上分配新内存,返回新字符串的指针。 - 所在头文件:
#include <string.h>
#include <stdlib.h> // 部分系统需要
- 返回值:
- 成功:返回指向新字符串的指针(在堆上分配)
- 失败:返回
NULL
(内存不足)
二、工作原理
- 根据原字符串长度 + 1(包含
\0
)分配内存 - 将原字符串内容复制到新内存
- 返回新内存地址
等价于:
char *strdup(const char *s) {
size_t len = strlen(s) + 1;
char *p = malloc(len);
if (p) {
memcpy(p, s, len);
}
return p;
}
三、使用示例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
const char *original = "Hello, AJie!";
char *copy = strdup(original); // 复制字符串
if (copy == NULL) {
printf("内存分配失败\n");
return 1;
}
printf("原字符串: %s\n", original);
printf("复制字符串: %s\n", copy);
free(copy); // 注意释放内存
return 0;
}
输出:
原字符串: Hello, AJie!
复制字符串: Hello, AJie!
四、注意事项
- 动态内存:
strdup
在堆上分配内存,需要 手动释放(free()
)。 - 跨平台:
- POSIX 标准支持
strdup
- C11 标准没有正式包含,可在 Windows 用
_strdup()
- POSIX 标准支持
- 安全性:
- 输入字符串为
NULL
会导致未定义行为 - 注意捕获返回值,防止内存分配失败
- 输入字符串为
五、总结
- 用途:复制字符串并返回新堆内存指针
- 关键点:
strdup
自动分配内存并复制字符串- 需要
free()
释放内存 - POSIX 环境下可直接使用,Windows 用
_strdup()
- 替代方法:手动
malloc + strcpy
发表回复