C/C++标准库 之 <cstdarg>

1.va_list

        1.1 引入头文件:#include <stdarg.h>

        2.1 作用:保存有关变量参数的信息

2.va_start

        2.1 引入头文件:#include <stdarg.h>

        2.2 声明式:void va_start(va_list ap, paramN);

        2.3 作用:初始化变量参数列表,初始化ap以检索参数paramN之后的附加参数

3.va_arg

        3.1 引入头文件:#include <stdarg.h>

        3.2 声明式:type va_arg(va_list ap, type)

        3.3 作用:检索下一个参数

4.va_end

        4.1 引入头文件:#include <stdarg.h>

        4.2 声明式:void va_end(va_list ap);

        4.3 作用:使用变量参数列表结束,执行适当的操作,以便于使用va_list对象ap检索其附加参数的函数正常返回。无论何时从该函数调用va_start,都应在函数返回之前调用该宏。

5.va_copy

        5.1 引入头文件:#include <stdarg.h>

        5.2 声明式:void va_copy(va_list dest, va_list src);

        5.3 作用:复制变量参数列表

Example:

#include <stdio.h>      /* printf, vprintf*/
#include <stdlib.h>     /* malloc */
#include <string.h>     /* strlen, strcat */
#include <stdarg.h>     /* va_list, va_start, va_copy, va_arg, va_end */

/* print ints until a zero is found: */
void PrintInts (int first,...)
{
  char * buffer;
  const char * format = "[%d] ";
  int count = 0;
  int val = first;
  va_list vl,vl_count;
  va_start(vl,first);
  
  /* count number of arguments: */
  va_copy(vl_count,vl);
  while (val != 0) {
    val=va_arg(vl_count,int);
    ++count;
  }
  va_end(vl_count);
  
  /* allocate storage for format string: */
  buffer = (char*) malloc (strlen(format)*count+1);
  buffer[0]='\0';
  
  /* generate format string: */
  for (;count>0;--count) {
    strcat (buffer,format);
  }
  
  /* print integers: */
  printf (format,first);
  vprintf (buffer,vl);
  
  va_end(vl);
}

int main ()
{
  PrintInts (10,20,30,40,50,0);
  return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML解析器来解析XML文件,使用C语言自带的字符串解析函数,比如strtok等。首先,需要打开XML文件并逐行读取,将每一行保存为一个字符串。然后,使用字符串解析函数解析每个标签和其对应的属性和值。可以使用栈结构来处理标签的嵌套关系,以便构建XML树形结构。最后,将XML树状结构打印出来。 具体的实现方法包括以下步骤: 1. 打开XML文件并逐行读取,将每一行保存为一个字符串。 2. 解析每个标签的开头和结尾,以及对应的属性和值。在解析属性和值时,需要考虑属性值可能带有单引号或双引号的情况,需要使用一些技巧来判断。 3. 使用栈来处理标签的嵌套关系,以便构建XML树形结构。具体来说,遇到一个标签的开头时,就将该标签入栈;当遇到一个标签的结尾时,就将栈顶元素弹出,表示该标签的嵌套关系已经结束。 4. 将构建好的XML树状结构打印出来,可以使用递归方式遍历XML树,输出每个标签及其对应的属性和值。 需要注意的一些问题包括: 1. 在解析属性和值时,需要考虑属性值可能包含单引号或双引号的情况。可以使用一个标记来判断当前属性值使用的是哪种引号。 2. 在使用栈处理XML的嵌套关系时,需要判断栈是否为空,以免发生栈溢出等错误。 3. 在输出XML树的时候,可以使用一些格式化的方式,让输出结果更易读。 最后,需要注意的是,手动解析XML文件是一项相对较为复杂的工作,需要考虑到很多细节和特殊情况。因此,如果可以使用开源的XML解析,会更加方便和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值