失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言中的神兽strdup

C语言中的神兽strdup

时间:2021-05-29 08:23:57

相关推荐

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\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

参考文档:

1/tigerjibo/article/details/12784823

如果觉得《C语言中的神兽strdup》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。