函数原型:
#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;
}
运行结果: 文章来源:https://www.toymoban.com/news/detail-817027.html
## ./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模板网!