zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jQuery UI vs EasyUI
    javascript数组元素的添加、删除与插入以及参数数组的使用
    ExtJS中get、getDom、getCmp、getBody、getDoc使用
    ASP.net 中 OutputCache 指令各个参数的作用
    母版页如何页面部分缓存
    Cache OutputCache ASP.NET缓存
    如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面
    页面级缓存@ OutputCache
    存储过程DataGrid分页及注意点
    vs2005中 Global.asax 没有 Global.asax.cs 问题解决
  • 原文地址:https://www.cnblogs.com/dylancao/p/10677660.html
Copyright © 2011-2022 走看看