真正的C程序高手,关于不确定数量参数的函数实现问题。

yuanreid 2002-10-05 03:19:48
我定义了如下的代码,其中PrintMessage为不确定参数的函数(只是个例子),我在函数体内如何得到第二个,第三个……第n个参数呢?

int _RTLENTRY _EXPFUNC TForm1::PrintMessage(char * __buffer, const char * __format, ...)
{
sprintf(__buffer,__format);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PrintMessage("%d %s","11","22");
}
//---
...全文
104 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanreid 2002-10-08
  • 打赏
  • 举报
回复
我的这段代码为什么只显示“11”?


void _RTLENTRY _EXPFUNC TForm1::PrintMessage(char * __buffer, const char * __format, ...)
{
//sprintf(__buffer,__format);
//ShowMessage(__buffer);
va_list ap;
char* arg;
va_start(ap, __format);
vsprintf(__buffer, __format, (char*)ap);
va_end(ap);
ShowMessage(__buffer);

}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PrintMessage("%d %s %d","11","22","33");
}
//---------------------------------------------------------------------------
大大怪老张 2002-10-08
  • 打赏
  • 举报
回复
学习ing
mopyman 2002-10-08
  • 打赏
  • 举报
回复
呵呵,都知道啊,我就不多说了
jishiping 2002-10-08
  • 打赏
  • 举报
回复
其实你的这个PrintMessage函数和sprintf函数类似,仅仅是多了一个显示的
信息。PrintMessage("%d %s %d","11","22","33");你将函数名换成sprintf
看看。C的函数sprintf会用吗?如果你将"11"改成"11111111111111111111",
程序说不定还会死!再退一步,printf函数会用吗?其实printf和sprintf的
用法类似,printf输出到屏幕,而sprintf输出到函数的第一个参数指定的缓
冲区(内存块)中而已,其它的和printf相同。而你这儿的PrintMessage的用
法和sprintf完全一样。
zbc 2002-10-05
  • 打赏
  • 举报
回复
这是我前几天写的一个例子,你看看有没有用:

//此函数用于求若干TDBEdit组件中的值的总和
float Tdmdlgs::Sum(TDBEdit * dbedt, ...)
{
float Result = 0.00;
TDBEdit *arg = 0;
va_list ap;
va_start(ap, dbedt);
Result = Result + atof(dbedt->Text.c_str());
while ((arg = va_arg(ap,TDBEdit *)) != NULL)
Result = Result + atof(arg->Text.c_str());
va_end(ap);
return Result;
}


================================================================

我和孤单有个约会
drason 2002-10-05
  • 打赏
  • 举报
回复
learning...
shadowstar 2002-10-05
  • 打赏
  • 举报
回复
//不好意思,写错了
va_list argptr;
shadowstar 2002-10-05
  • 打赏
  • 举报
回复
//同意楼上,加一句声明 va_list 类型变量 argprt
int _RTLENTRY _EXPFUNC TForm1::PrintMessage(char * __buffer, const char * __format, ...)
{
va_list argprt;

va_start(argptr, __format);
vsprintf(__buffer, __format, argptr);
va_end(argptr);

return xxx; //返回值你自己写啦
}

jishiping 2002-10-05
  • 打赏
  • 举报
回复
int _RTLENTRY _EXPFUNC TForm1::PrintMessage(char * __buffer, const char * __format, ...)
{
va_start(argptr, __format);
vsprintf(__buffer, __format, argptr);
va_end(argptr); return xxx; //返回值你自己写啦
}
CCLIS 2002-10-05
  • 打赏
  • 举报
回复
我现在也不用TURBO C了,呵呵,找不到安装盘了。
yuanreid 2002-10-05
  • 打赏
  • 举报
回复
手头没有啊,请贴一下,多谢
CCLIS 2002-10-05
  • 打赏
  • 举报
回复
看一下TURBO C的帮助。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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