va_arg 读不到最后一个参数
#include <stdio.h>
#include <stdarg.h>
void execProcedurce( /*int cnt, */const char* procedurceName,...)
{
va_list argptr;
va_start( argptr, procedurceName );
while (true)
{
procedurceName = va_arg( argptr, const char* );
if ( procedurceName == NULL)
{
break;
}
procedurceName = NULL;
}
va_end( argptr );
}
int main()
{
execProcedurce("hello", "a");
return 0;
}为什么找不到结束的位置, 读到下一个参数指向的地址信息变成 <读取字符串的字符时出错。>
相关推荐
va_list(),va_start(),va_arg(),va_end() 详细解析
(一)写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏: 代码如下:void va_start( va_list arg_ptr, prev_param );type va_arg( va_list arg_ptr, type );void va_end( va_list arg_ptr );va在这里是variable-argument(可变参数)的意思.这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,该函数至少有一个整数参数,第二个参数也是整数,是可选的.函
关于C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)
可变参数的函数原理其实很简单,而va系列是以宏定义来定义的,实现跟堆栈相关.我们写一个可变函数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数。如果在C++里,我们应该利用C++的多态性来实现可变参数的功能,尽量避免用C语言的方式来实现
va_start、va_end、va_list的详细使用方法
va_start、va_end、va_list的详细使用方法,对想了解的人很有帮助。
stdarg.h中三个宏va_start ,va_arg和va_end的应用
1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变 量是指向参数的指针. 2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第 一个可变参数的前一个参数,是一个固定的参数. 3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个 参数是你要返回的参数的类型,这里是int型. 4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使
va-list原理解释
va_list原理解释,解释了关于VA_LIST的用法、VA_LIST在编译器中的处理、VA_LIST应该注意的问题、以及相关程序


