• C语言中的神兽strdup


      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
    ”,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 
    	",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

  • 相关阅读:
    .net中的正则表达式使用高级技巧 (二)
    经典的LZW算法C语言实现
    .net中的正则表达式使用高级技巧
    Atlas应用程序调试技巧
    从毕业到现在是如何走来的!!!
    关于JS的一些实际问题
    js学习笔记(十四)事件处理模型
    js学习笔记(十一)窗口和框架
    关于css的一些问题
    浏览器布局BUG汇总
  • 原文地址:https://www.cnblogs.com/dylancao/p/10677660.html
Copyright © 2020-2023  润新知