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