va_arg 读不到最后一个参数

machuanfei_c 2015-06-13 10:08:02
#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;
}


为什么找不到结束的位置, 读到下一个参数指向的地址信息变成 <读取字符串的字符时出错。>
...全文
327 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2015-06-13
  • 打赏
  • 举报
回复
If there is no next argument, or if type is not compatible with the type of the actual next argument (as promoted accord- ing to the default argument promotions), random errors will occur. va_arg的manpage这样说道,所以楼主不能以va_arg返回NULL作为判断的依据,必须自己传入参数个数。
苏叔叔 2015-06-13
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdarg.h>
void execProcedurce(int cnt, ...)
{
	va_list argptr;
	va_start(argptr, cnt);

	int i = 0;
	while (i < cnt)
	{
		printf("%s\n", va_arg(argptr, const char*));
		i++;
	}
	va_end(argptr);
}
int main()
{
	execProcedurce(2, "hello", "a");
	return 0;
}
//hello
//a
machuanfei_c 2015-06-13
  • 打赏
  • 举报
回复
引用 2 楼 qq120848369 的回复:
If there is no next argument, or if type is not compatible with the type of the actual next argument (as promoted accord- ing to the default argument promotions), random errors will occur. va_arg的manpage这样说道,所以楼主不能以va_arg返回NULL作为判断的依据,必须自己传入参数个数。
那为什么我这个单独拿出来放在一个空的项目里面完全可以运行的。。。
machuanfei_c 2015-06-13
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiangDavaid 的回复:

#include <stdio.h>
#include <stdarg.h>
void execProcedurce(int cnt, ...)
{
	va_list argptr;
	va_start(argptr, cnt);

	int i = 0;
	while (i < cnt)
	{
		printf("%s\n", va_arg(argptr, const char*));
		i++;
	}
	va_end(argptr);
}
int main()
{
	execProcedurce(2, "hello", "a");
	return 0;
}
//hello
//a
必须要传入个数吗? 不能根据传入的参数判断结束吗
mewiteor 2015-06-13
  • 打赏
  • 举报
回复
execProcedurce("hello", "a",NULL);
最后的NULL必须有

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧