首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >strdup函数

strdup函数

原创
作者头像
用户3672714
发布2025-09-19 16:47:55
发布2025-09-19 16:47:55
7700
代码可运行
举报
运行总次数:0
代码可运行

阿杰,我给你整理一份 strdup 函数详解,包括概念、用法、返回值、注意事项和示例。


一、概念

  • 函数原型(C 标准库):
代码语言:javascript
代码运行次数:0
运行
复制
char *strdup(const char *s);
  • 作用:复制一个字符串 s 并在堆上分配新内存,返回新字符串的指针。
  • 所在头文件
代码语言:javascript
代码运行次数:0
运行
复制
#include <string.h>
#include <stdlib.h> // 部分系统需要
  • 返回值
    • 成功:返回指向新字符串的指针(在堆上分配)
    • 失败:返回 NULL(内存不足)

二、工作原理

  1. 根据原字符串长度 + 1(包含 \0)分配内存
  2. 将原字符串内容复制到新内存
  3. 返回新内存地址

等价于:

代码语言:javascript
代码运行次数:0
运行
复制
char *strdup(const char *s) {
    size_t len = strlen(s) + 1;
    char *p = malloc(len);
    if (p) {
        memcpy(p, s, len);
    }
    return p;
}

三、使用示例

代码语言:javascript
代码运行次数:0
运行
复制
#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;
}

输出

代码语言:javascript
代码运行次数:0
运行
复制
原字符串: Hello, AJie!
复制字符串: Hello, AJie!

四、注意事项

  1. 动态内存strdup 在堆上分配内存,需要 手动释放free())。
  2. 跨平台
    • POSIX 标准支持 strdup
    • C11 标准没有正式包含,可在 Windows 用 _strdup()
  3. 安全性
    • 输入字符串为 NULL 会导致未定义行为
    • 注意捕获返回值,防止内存分配失败

五、总结

  • 用途:复制字符串并返回新堆内存指针
  • 关键点
    • strdup 自动分配内存并复制字符串
    • 需要 free() 释放内存
    • POSIX 环境下可直接使用,Windows 用 _strdup()
  • 替代方法:手动 malloc + strcpy

https://www.52runoob.com/archives/7363

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概念
  • 二、工作原理
  • 三、使用示例
  • 四、注意事项
  • 五、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档