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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三字棋游戏的实现

头文件&#xff1a; #define row 5 #define line 5 #include <stdio.h> #include <stdlib.h> #include <time.h> void initial(char board[row][line]); void print_board(char board[row][line]); void player_move(char board[row][line]); char is_win(c…

如何正确利用点对点传输工具来传输文件

P2P技术作为一种创新的数据交换机制&#xff0c;近年来已经获得了广泛的关注和应用。这种技术通过直接在用户之间建立连接&#xff0c;绕过了传统的中心服务器架构&#xff0c;从而在数据传输效率和速度上实现了显著提升。然而&#xff0c;正如硬币有两面&#xff0c;P2P技术同…

爬虫正则+bs4+xpath+综合实战详解

Day3 - 1.数据解析概述_哔哩哔哩_bilibili 聚焦爬虫&#xff1a;爬取页面中指定的页面内容 编码流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 数据解析 -> 持久化存储 数据解析分类&#xff1a;正则、bs4、xpath(本教程的重点) 数据解析原理概述&am…

OpenCV——Scharr边缘检测

目录 一、Scharr算法1、算法概述2、主要函数 二、C代码三、python代码四、结果展示1、灰度图2、X方向一阶边缘2、Y方向一阶边缘3、整幅图像的一阶边缘 五、相关链接 OpenCV——Scharr边缘检测由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&…

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 此自动化脚本将帮助你使用 Python 中的 Android 调试桥 (ADB) 自动化你的智能手机。下面我将展示如何自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 您可以了解有关 ADB 的更多信息,…

2695. 包装数组

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 创建一个名为 ArrayWrapper 的类&#xff0c;它在其构造函数中接受一个整数数组作为参数。该…

什么是网络安全,如何防范?

网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全涵盖了网络设备安全、网络信息安全…

json数据转换为file文件格式

const jsonData {name:小明,age:18}; //转成字符串 const jsonStrings JSON.stringify(jsonData); // 创建Blob对象 const blob new Blob([jsonStrings],{type:application/json}); //转成文件 const file new File([blob],fileName.json,{type:application/json});

kaafka的rebalance机制

Kafka的Rebalance机制是为了实现高可用和负载均衡而设计的。当Kafka集群中的消费者组发生变化时&#xff08;例如有新的消费者加入或有消费者离开&#xff09;&#xff0c;Rebalance机制会自动重新分配分区给消费者&#xff0c;以确保每个消费者分配到大致相等的负载。 下面是…

优化管理流程 夯实管理基石

问团队就人才中心管理流程的梳理及优化设计、工作规范与管理制度梳理、跨部门与部门内部协作配合有效性等方面提出了诸多管理思路与方法工具&#xff0c;中心干部员工通过3个月的学习与参与项目&#xff0c;展现了更加积极的工作状态&#xff0c;并学习到了更为先进并科学的工作…

如何用AirServer进行手机投屏?,Airserver 永久激活注册码

AirServer一款投屏神器&#xff0c;可以帮你轻松地将iPhone、iPad投屏到Mac。是不是经常看到游戏主播用AirServer投屏&#xff1f;此外&#xff0c;AirServer也是视频Up主必备工具之一&#xff01;用来录制演示教程不错。除了实现单个手机投屏到电脑或荧幕。如果你有多画面投屏…

原神启动(递推,矩阵)

Part 1. 引子 求有多少 1 ∼ n 1\sim n 1∼n的排列&#xff0c;满足&#xff1a; 进行 k k k轮原神排序后变为升序 具体的&#xff0c;一轮原神排序的定义为&#xff1a; 指针 i i i按 [ 1 , n ) [1,n) [1,n)的顺序正序遍历&#xff0c;如果 a i > a i 1 a_i>a_{i1}…

React进阶 - 12(浅谈 state、props与render函数的关系)

本章内容 目录 一、state 与 render 函数的关系二、props 与 render函数的关系 上一节我们讲了如何使用 PropTypes及 DefaultProps来进行属性的类型校验及设置属性默认值。本节内容我们来了解一下 state、props与render函数的关系。 一、state 与 render 函数的关系 我们知道…

C++中的const常量-->‘only read,can‘t change‘

2024年1月22日 ///昨天外面下雨地没干&#xff0c;骑车摔得好结实&#xff0c;,, 2024年1月23日 内容整理自The Cherno:C系列 这个关键字确实有点难&#xff0c;看了好几遍原视频整理出来的知识框架&#xff0c;还需要加以练习 -----------------------------------------…

【AI视野·今日Robot 机器人论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 11 Jan 2024 Totally 16 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Analytical Model and Experimental Testing of the SoftFoot: an Adaptive Robot Foot for Walking over Obstacles and Irre…

spawn_group_template | spawn_group | linked_respawn

字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来&#xff0c;这样如果你杀死boss&#xff0c; creatures | gameobjects 在副本重置之前…

「我在淘天做技术」智能对话新纪元:百万日活对话机器人的 LLM 落地实践

作者&#xff1a;智能小蜜团队 一、前言 阿里小蜜家族&#xff08;阿里小蜜、店小蜜、万象&#xff09;&#xff0c;从 2015 年发展至今&#xff0c;已经成为了覆盖淘天 P-C&#xff08;平台-消费者&#xff09;、B-C&#xff08;商家-消费者&#xff09;、P-B&#xff08;平台…

C++学习笔记--数组

数组 所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数组中的每个元素数据元素都是相同的数据类型 特点2&#xff1a;数组是由连续的内存位置组成的 一维数组 一维数组定义的三种方式&#xff1a; 1、数据类型 数组名 [数…

【明道云】【企业数字化】如何将明道云的数据直连SmartBi使用

【背景】 明道云优势在于上传和企业内部流程的系统化&#xff0c;换句话说&#xff0c;是产生数据的部分。 SmartBi优势在于生成报表和即席查询等&#xff0c;是使用沉淀数据的部分。 如果能将这两部分的数据打通&#xff0c;可以大大扩展企业数字化框架的覆盖范围。让这两套平…

恭喜!中移集成、广西移动、辽宁移动三家客户学员通过亚信安慧AntDB ACP认证

新年伊始&#xff0c;中移集成、广西移动、辽宁移动三家客户燃起了极大的学习热情&#xff0c;联合亚信安慧AntDB数据库团队共同组织了第二期亚信安慧AntDB数据库中级培训。三家客户分别遴选各自优秀的高级运管人员参与本期培训。 培训安排及成果 为方便学员合理安排工作、学习…