argz_extract()函数,argz_stringify()函数
2015-10-07 00:00
351 查看
摘要: argz_extract()函数是把一个argz vector转成标准的main第二个参数argv;
argz_stringify()函数是把一个argz vector转成正常的字符串。
函数分别位于glibc源码中的../glibc-version/string/argz-extract.c和../glibc-version/string/argz-stringify.c中。
函数声明如下:
argz_extract()函数是将argz vector中的元素转存到argv中,以此实现一维到二维的转换。注意,argv最后要有一个元素为NULL,以"this is a test"为例,转换结果如下图:
argz_stringify()函数是将argz vecotr变成一个正常的字符串,以给定的delim字符去替换argz vector中的\0,在上例中假如再给定字符','那么得到的结果如下图:
函数的实现如下:
argz_stringify()函数是把一个argz vector转成正常的字符串。
函数分别位于glibc源码中的../glibc-version/string/argz-extract.c和../glibc-version/string/argz-stringify.c中。
函数声明如下:
// argz.h /* Puts pointers to each string in ARGZ into ARGV, which must be large enough to hold them all. */ extern void __argz_extract (__const char *__restrict __argz, size_t __len, char **__restrict __argv) __THROW; extern void argz_extract (__const char *__restrict __argz, size_t __len, char **__restrict __argv) __THROW; /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW; extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
argz_extract()函数是将argz vector中的元素转存到argv中,以此实现一维到二维的转换。注意,argv最后要有一个元素为NULL,以"this is a test"为例,转换结果如下图:
argz_stringify()函数是将argz vecotr变成一个正常的字符串,以给定的delim字符去替换argz vector中的\0,在上例中假如再给定字符','那么得到的结果如下图:
函数的实现如下:
/* Puts pointers to each string in ARGZ, plus a terminating 0 element, into ARGV, which must be large enough to hold them all. */ void __argz_extract (const char *argz, size_t len, char **argv) { while (len > 0) { size_t part_len = strlen (argz); *argv++ = (char *) argz; argz += part_len + 1; len -= part_len + 1; } *argv = 0; } weak_alias (__argz_extract, argz_extract) /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ void __argz_stringify (char *argz, size_t len, int sep) { if (len > 0) while (1) { size_t part_len = __strnlen (argz, len); argz += part_len; len -= part_len; if (len-- <= 1) /* includes final '\0' we want to stop at */ break; *argz++ = sep; } } libc_hidden_def (__argz_stringify) weak_alias (__argz_stringify, argz_stringify)
相关文章推荐
- ocp-141
- ocp-142
- getWritableDatabase()和getReadableDatabase()的区别
- iOS培训哪家好呢?为什么这么多人选择蜂窝教育呢?
- cpp字符串流
- 内存泄漏
- inline函数
- cpp类的初始化参数列表
- 析构函数 this 静态成员变量 静态成员函数 const friend
- 静态编练 动态编练
- TF-IDF与余弦相似性的应用(一):自动提取关键词
- 美媒称中国手机APP"烧钱时代"面临终结
- 页面跳转学习笔记
- Js如何监视Iframe内部地址改变
- Ubuntu下安装Docker
- 樱陀花园10月份活动策划
- linux 开启防火墙的指定端口
- linux 开启防火墙的指定端口
- hadoop初始化配置详细
- hadoop2.5.2安装