• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言中的神兽strdup

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C语言博客作业--函数嵌套调用发布时间:2022-07-13
下一篇:
【AIMTechRound5(rated,Div.1+Div.2)C】Rectangles发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap