c语言strup用法,C语言中的神兽strdup

C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。

函数原型:

#include

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

#include

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

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

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.cnblogs.com/dylancao/p/10677660.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值