文档章节

C语言中的神兽strdup

o
 osc_gu9d45li
发布于 2019/04/09 16:16
字数 467
阅读 8
收藏 0

精选30+云产品,助力企业轻松上云!>>>

  C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。

函数原型:

#include <string.h>
char *strdup(const char *s);

函数介绍:

  strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现。

strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。该函数的返回值是返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

函数实现:

char * __strdup(const char *s)
{
   size_t  len = strlen(s) +1;
   void *new = malloc(len);
   if (new == NULL)
      return NULL;
   return (char *)memecpy(new,s,len);
}

函数实战:

#include <syslib.h>
#include<string.h>
int main(void)
{
     char *src =”This is the strdup test”;
     char *dest;
     dest = strdup(s);
     printf(“the dest %s\n”,dest);
 
     return 0;

}

   运行结果是:

the dest This is the strdup test

常用方法:

#include <stdio.h>

#include <string.h>

#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <getopt.h>


static struct option main_options[] = {
        { "help",       0, 0, 'h' },
        { "verbose",    0, 0, 'v' },
        { "msbc",       0, 0, 'm' },
        { "subbands",   1, 0, 's' },
        { "bitpool",    1, 0, 'b' },
        { "joint",      0, 0, 'j' },
        { "dualchannel",0, 0, 'd' },
        { "snr",        0, 0, 'S' },
        { "blocks",     1, 0, 'B' },
        { 0, 0, 0, 0 }
};

int main(int argc, char *argv[])
{
        char *output = NULL;
        int i, opt, tofile = 0;
        bool msbc = false;

        while ((opt = getopt_long(argc, argv, "+hmvd:f:",
                                                main_options, NULL)) != -1) {
                switch(opt) {
                case 'h':
                        exit(0);

                case 'v':
                        break;

                case 'm':
                        msbc = true;
                        break;

                case 'd':
                        free(output);
                        output = strdup(optarg);
                        tofile = 0;
                        break;

                case 'f' :
                        free(output);
                        output = strdup(optarg);
                        //printf("%s",output);
                        tofile = 1;
                        break;

                default:
                        exit(1);
                }
        }

        argc -= optind;
        argv += optind;
        optind = 0;

        if (argc < 1) {
                exit(1);
        }


        for (i = 0; i < argc; i++)
                        printf("%s \n\t",argv[i]);

        free(output);

        return 0;
}

  运行结果:

## ./strfile -f test.wav new.wav testb.wav
new.wav
testb.wav

参考文档:

https://blog.csdn.net/tigerjibo/article/details/12784823

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
C语言中的神兽strdup

  C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。 函数原型: #include <string...

osc_q7wo0k6s
05/03
9
0
C语言中的神兽strdup

  C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。 函数原型: #include char st...

虚生
2019/04/09
0
0
C语言对传入参数的处理

/ Loop through argv parsing options. / while ((c = getopt(argc, argv, ":f:a:l:h")) != -1) { switch (c) { case 'f': filename = strdup(optarg); break; case 'a': ddraddrp = strdup(......

osc_vf6gypzr
2019/09/02
2
0
strdup

strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现。 功 能: 将串拷贝到新建的位置处 strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时...

全国司机总代表
2018/03/08
0
0
strcpy和strdup比较和详解

strcpy和strdup比较和详解 函数和功能描述: ①extern char strdup(char s); 头文件:string.h 功能: 将串拷贝到新建的位置处 说 明:strdup不是标准的c函数。strdup()在内部调用了malloc()为...

全国司机总代表
2018/03/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 01:01 Disabling Google 2FA Doesn't Need 2FA - (infoq.com) 禁用google2fa不需要2FA 得分:98 | 评论:33 Rackspace S-1 - (sec.gov) 机架空间S-1 得分:59 | 评论:20 S......

FalconChen
今天
142
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
29
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
20
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部