C語言的確博大精深,在C語言的世界中遨遊了那麼多年,發現本身還是菜鳥一枚,不少利器沒有可以駕馭,今天介紹一個神獸,威力無比,可是卻不多人能用得好。函數
函數原型:spa
#include <string.h> char *strdup(const char *s);
函數介紹:.net
strdup()函數是c語言中經常使用的一種字符串拷貝庫函數,通常和free()函數成對出現。指針
函數實現:code
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); }
函數實戰:blog
#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
get
參考文檔: