linux C函数之strdup函数分析和getopt_long()的使用

这篇具有很好参考价值的文章主要介绍了linux C函数之strdup函数分析和getopt_long()的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

函数原型:

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

函数介绍:

       strdup()函数主要是拷贝字符串s的一个副本,有函数返回值返回,这个副本有自己的内存空间,和s没有关联。strdup函数复制一个字符串,使用完后,要使用free函数删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL就会段错误,因为该函数包括了strlen函数,而该函数参数不能为NULL。

  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);
     free(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://www.toymoban.com/news/detail-817027.html

到了这里,关于linux C函数之strdup函数分析和getopt_long()的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell脚本中getopts的使用

          在shell中,getopts用于解析命令选项和参数 。getopts是Bash shell的内置命令, 不支持长选项,仅解析短选项 ,即一个破折号(\\\"-\\\")和一个字母或数字,如-1,-e, -E等。       getopts格式如下:       1.getopts命令后面的字符串如\\\":a:c:Fg:\\\"就是可以使用的选项列表即OptString, 每个

    2024年02月16日
    浏览(27)
  • 【Socket】Linux下UDP Socket的基本流程以及connect、bind函数的使用(C语言实现)

    Socket的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”。 Socket通信主要有两个类型:TCP、UDP。 TCP通信,是一个有序的、可靠的、面向连接的通信方式。用数据流的方式传递信息。 UDP通信,是无连接的、不保证有序到达的、但具有较好的实时性、能够高速传输

    2024年02月13日
    浏览(27)
  • int,long,long long对应10的数量级【c语言】

            刷题的时候,题目会给出变量的范围,这个时候就要想清楚用哪个类型 输出结果为:

    2024年04月13日
    浏览(26)
  • qPrintable() 和strdup()解释

    在进行多线程编程时,一个局部QString对象,经过转换成char*后,当做参数传入线程函数,结果输入一直为空。 qPrintable() 和 strdup() qPrintable() 和 strdup() 是 Qt 中常用的字符串转换函数。 qPrintable() 函数用于将 QString 类型转换成 char* 类型,用于 C++ 中使用的字符串函数。例如: 该

    2024年02月06日
    浏览(20)
  • C语言之【函数】篇章以及例题分析

    在C语言中,这个函数时必不可少的,没有函数没有灵魂,要不然代码就会乱成一团,所以我们要学函数,接下来就开始函数之旅~~ 数学中我们其实就见过函数的概念,比如:一次函数y=kx+b ,k和b都是常数,给一个任意的x,就得到一个y值。其实在C语言也引入 函数(function)

    2024年01月19日
    浏览(35)
  • RocketMQ的长轮询(Long Polling)实现分析

    目录 前言 长轮询 1.实现步骤 1.1客户端轮询发送请求 1.2服务端处理数据 1.3客户端接收数据 2.实现实例 RocketMQ长轮询 1.PullMessage服务 2.PullMessageProcessor服务 3.PullCallback回调 总结 消息队列一般在消费端都会提供push和pull两种模式,RocketMQ同样实现了这两种模式,分别提供了两个实

    2024年02月07日
    浏览(28)
  • 静态分析C语言生成函数调用关系的利器——GCC

    在《静态分析C语言生成函数调用关系的利器——cally和egypt》中我们介绍了如何使用GCC生成RTL文件,然后再借助cally和egypt来分析出调用关系的方法。GCC自身有命令可以生成代码内部的调用关系,即-fcallgraph-info参数。 Makes the compiler output callgraph information for the program, on a per-ob

    2024年01月25日
    浏览(36)
  • 【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

    本章总结 : 读懂 apply 标准库函数 核心是其 block: T.() - Unit 参数 , 这是 泛型扩展匿名函数 ; 泛型扩展匿名函数 T.() - Unit 演变路径 : 普通匿名函数 : () - Unit , 这个函数 参数 和 返回值 都为空 ; 扩展匿名函数 : String.() - Unit , 这个函数 是 为 具体的 String 类型定义的扩展函数 ; 泛型

    2023年04月09日
    浏览(29)
  • JS语言里常见的随机函数示例,实验结果分布规律分析

    在JavaScript语言里有个 Math.random() 随机函数,用于生成指定范围内的随机数。 Math.random()函数 根据官方的定义: Math.random() 函数返回一个浮点数, 伪随机数在范围[0,1),也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需的范围。实现将初始种子选择到

    2024年02月14日
    浏览(33)
  • linux C语言socket函数send

    在Linux中,使用C语言进行网络编程时, send 函数是用于发送数据到已连接的套接字的重要函数 之一。它通常用于TCP连接,但也可以用于UDP(尽管对于UDP,通常更推荐使用 sendto ,因为它允许你指定目标地址和端口)。 下面是 send 函数的详细解释: recv  函数在  sys/socket.h  中

    2024年02月20日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包