文档章节

argz_extract()函数,argz_stringify()函数

微笑不知慌张
 微笑不知慌张
发布于 2015/10/07 01:07
字数 383
阅读 75
收藏 2

函数分别位于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)

 

© 著作权归作者所有

微笑不知慌张
粉丝 1
博文 7
码字总数 3082
作品 0
西安
私信 提问
argz_count()函数

函数位于glibc源码中的../glibc-version/string/argz-cout.c中,其作用统计一个argz vector中元素(字符串)的个数。 argz vector是存储在连续空间的一维字符数组,元素(字符串)彼此之间以...

微笑不知慌张
2015/10/07
9
0
argz_create_sep函数

函数位于glibc源码中的../glibc-version/string/argz-ctsep.c中,其作用是将字符串以指定的字符进行分割,指定字符的位置替换成空字符串(0),使整个字符串形成一个argz vector。 argz vec...

微笑不知慌张
2015/09/29
77
0
argz_create函数

函数位于glibc源码中的../glibc-version/string/argz-create.c中,其作用是将Unix-style的参数数组argv转换成一个argz vector。 argz vector是存储在连续空间的一维字符数组,彼此之间以空字...

微笑不知慌张
2015/09/29
128
0
理解JSON对象

语法规则   JSON的语法可以表示以下三种类型的值 【1】简单值   简单值使用与javascript相同的语法,可以在JSON中表示字符串、数值、布尔值和null   字符串必须使用双引号表示,不能使...

jjjssswww
2017/06/06
0
0
JSON.stringify()的几个返回值

工具函数JSON.stringify()在将JSON对象序列化为字符串时用到了toString,涉及到toString的相关规则,下面是firefox控制台的一些运行结果。 JSON.stringify() JSON.stringify()可以接收一个可...

刘尐六
2016/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

“旧城改造”的背后——银泰新零售阿里云解决方案(上)

相关免费课程《银泰新零售上云解决方案精讲》上线中 立足实战 讲透经典案例 助你快速理解新零售 第一节学习地址 第二节学习地址 传统线下商业体上云的案例 与其说银泰上云,倒不如说银泰“旧...

阿里云官方博客
5分钟前
0
0
记一次升级Oracle驱动引发的死锁

问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次“死锁(deadlock)”的问题,部分关键日志如下: Found one Java-level deadlock:...

ksfzhaohui
7分钟前
0
0
MySQL 中的 information_schema 数据库

欢迎查看原文 - 本博客仅记录 https://blog.csdn.net/kikajack/article/details/80065753 -- 是否开启bin_log日志: off为关闭-- show variables like 'log_%'; show variables like '......

莫库什勒
14分钟前
0
0
Random在高并发下的缺陷以及JUC对其的优化

Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了。但并不是每个人都知道...

编程SHA
19分钟前
0
0
T5大牛带你解析:如何实现分布式技术

1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案。 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓...

李红欧巴
31分钟前
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部