侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

envz_add函数用法详解

noerror
2022-11-08 / 0 评论 / 0 点赞 / 123 阅读 / 687 字 / 正在检测是否收录...

envz_add函数用法详解

envz_add函数简介

  • 头文件包含

  • 函数定义
#include <envz.h>
error_t envz_add(char ** envz , size_t * envz_len ,
                 const char * name , const char * value );
char *envz_entry(const char * envz , size_t  envz_len \
char *envz_get(const char * envz , size_t  envz_len \
error_t envz_merge(char ** envz , size_t * envz_len ,
                   const char * envz2 , size_t  envz2_len \
void envz_remove(char ** envz , size_t * envz_len \
void envz_strip(char ** envz , size_t * envz_len );

envz_add函数常见使用错误

  • 编译错误
    warning: implicit declaration of function ‘envz_add’ [-Wimplicit-function-declaration]
    解决办法:包含头文件

envz_add函数详细描述

这些函数是特定于glibc的。
argz向量是指向字符缓冲区和长度的指针,参见argz_add (3).envz向量是一种特殊的argz向量,即字符串的形式为“name=value”。第一个\(aq=\(aq)之后的所有内容都被认为是值。如果没有\(aq=\(aq),该值被认为是NULL。(而尾随\(aq=\(aq)的值是空字符串“”。)
这些函数用于处理envz向量。
envz_add ()将字符串.RI&“name=value&”(如果value为非空)或.RI&“name&”(如果value为空)添加到envz向量.RI(envz,*envz_len)中,并更新envz和envz_len ,如果存在具有相同name的条目,则删除该条目。
envz_entry ()在envz vector.ri(envz,\envz_len)中查找name,如果找到就返回条目,如果找不到则返回NULL。
envz_get ()在envz向量.RI(envz,\envz_len)中查找name,如果找到,则返回值,如果没有,则返回NULL。(请注意,该值也可以为NULL,即当name的条目不带\(aq=\(aq符号)时。)
envz_merge ()将envz2中的每个条目添加到
envz ,就像使用envz_add ()一样。如果override为真,则envz2中的值将取代*envz 中同名的值,否则不是。
envz_remove ()从.RI(*envz,*envz_len)中删除name的条目(如果有的话)。
envz_strip ()删除值为NULL的所有条目。

envz_add函数返回值

所有执行内存分配的envz函数都有一个返回类型error_t(整数类型),如果成功,返回0,如果发生分配错误,返回 ENOMEM

envz_add函数使用举例

#include <stdio.h>
#include <stdlib.h>
#include <envz.h>

int
main(int argc, char *argv[], char *envp[])
{
   int e_len = 0;
   char *str;

   for (int i = 0; envp[i] != NULL; i++)
       e_len += strlen(envp[i]) + 1;

   str = envz_entry(*envp, e_len, "HOME");
   printf("%s\en", str);
   str = envz_get(*envp, e_len, "HOME");
   printf("%s\en", str);
   exit(EXIT_SUCCESS);
}
0

评论区