2 lx624909677 lx624909677 于 2013.09.20 12:22 提问

可变参数的函数的使用问题

现在我有个可变参数的函数,具体如下:
void WriteLog(wchar_t * szLog,...)
{
va_list arg_ptr;
va_start(arg_ptr,szLog);
fwprintf(fp,szLog,arg_ptr);
fwprintf(fp,L"\n\n\n");
va_end(arg_ptr);
}
然后还有个函数调用这个函数
int main()
{
wchar_t str[STR_NUM]=L"hello";
wchar_t str1[STR_NUM]=L"world";
WriteLog(str,str1);
return 0;
}
这样写完之后,为什么只能把第一个参数的内容写到文件里呢?我想要一次把所有参数内容全部读出来,类似于用sprintf的实现

2个回答

lx624909677
lx624909677   Ds   Rxr 2014.12.11 09:07
已采纳

已经解决了。用的format的一个扩展版本搞定了

liuyy2007
liuyy2007   2013.11.26 12:18

参考《必须弄懂的495个c语言问题》15.7 怎样知道实际上有多少个参数传入函数

下面是内容,排版比较渣
15.7 怎样知道实际上有多少个参数传入函数?
这一段信息不可移植。一些旧系统提供一个非标准函数 nargs()。然而它的可
信度值得怀疑, 因为它的典型返回值是参数的字节长度, 而不是参数的个数。结
构、整数和浮点类型的值一般需要几个字节的长度。
任何接收可变参数的函数都应该可以从传入的参数本身来得到参数的数目。
类 printf 函数从格式字符串中的格式说明符来确定参数个数, 就象 %d 这样的格式
说明符。所以如果格式字符串和参数数目不符时, 此类函数会出错的很厉害。
还有一个常用的技巧, 如果所有的参数是同一个类型, 在参数列最后加一个
标记值。通常用 0、-1 或适当类型转换的空指针, 参见问题 5.2 和 15.4 例子中
exec1() 和 vstrcat() 的用法。
最后, 如果类型是可预见的, 你可以加一个参数数目的参数。当然调用者通常
是很不喜欢这种做法的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!