怎样得到可变参数个数

wzs_wzs123 2006-06-26 10:59:39
例如
int func(CString str,...)
{
}
怎样才能知道具体传进了几个参数呢,我不想再传一个参数个数的参数
...全文
487 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AmyLin_2001 2006-08-15
  • 打赏
  • 举报
回复
收藏
hijack 2006-06-26
  • 打赏
  • 举报
回复
因为是可变参数,void func(CString str, ...)是不知道传进来的是什么数据,要根据函数的功能判断.

如:
CString str;
__int64 n = 0x1234567890abcdef;
str.Format("%x,%x", n);
cout << (LPCTSTR)str << endl;

wzs_wzs123 2006-06-26
  • 打赏
  • 举报
回复
seu07201213(汪洋中的一片叶子) :如果传入的是一个结构参数呢
折腾_苏州 2006-06-26
  • 打赏
  • 举报
回复
小例子,参考参考
#include <stdio.h>
#include <stdarg.h>
#include <iostream.h>
void func(CString str, ...)
{
int total = 1;
va_list ap;
CString arg;
va_start(ap, str);
while ((arg = va_arg(ap,int)) != "\0") {
total ++;
}
cout<<total<<'\n'; //获得传入参数个数
va_end(ap);
}

int main(void) {
func(1,2,3,4,5,6,7,8,9);
return 0;
}
wzs_wzs123 2006-06-26
  • 打赏
  • 举报
回复
JessC 2006-06-26
  • 打赏
  • 举报
回复
怎样得到可变参数个数?
归纳起来有三种办法:
1:函数的第一个参数,指定后续的参数个数,如func(int num,...)
2: 根据隐含参数,判断参数个数,如printf系列的,通过字符串中%的个数判断
3: 特殊情况下(如参数都是不大于0xFFFF的int),可以一直向低处访问堆栈,直到返回地址,
也可以检查读到的数据,如果大于0x10000,可以检查其地址的内存访问属性判断,比如是可执行(汗。。。有必要这样吗?万一参数传错了)
折腾_苏州 2006-06-26
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdarg.h>
struct T_Progs{
int x;
int y;
};

void func(T_Progs *tProgs,...)
{
int total = 0;
va_list ap;
T_Progs *p;
va_start(ap, tProgs);
p = tProgs;
printf("x[%d]=%d\n",total,p->x);
printf("y[%d]=%d\n",total,p->y);
total++;
while (p = (va_arg(ap,T_Progs *)))
{
printf("x[%d]=%d\n",total,p->x);
printf("y[%d]=%d\n",total,p->y);
total ++;
}
va_end(ap);
printf("参数个数:%d\n",total);
}
void main(void)
{
T_Progs test1,test2;
test1.x = 1;test2.x = 3;
test1.y = 2;test2.y = 4;
func(&test1,&test2,NULL);
}
wzs_wzs123 2006-06-26
  • 打赏
  • 举报
回复
ding

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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