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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用可变参数,实现函数,求函数参数的平均值和最大值
利用可变参数列表:可变参数列表是通过宏来实现的,这些宏定义在stdarg.h中。 值得注意的是:可变参数列表传参时,第一个传的参数的个数。 步骤: 1.定义一个va_list类型的变量 arg 2.宏va_start(arg,num)---这个宏有两个参数,第一个参数为va_list类型的变量,第二个参数为可变参数列表之前的参数。作用就是使得 va_list 的变量指向可变
使用可变参数,实现函数,求函数参数的平均值
使用可变参数,实现函数,求函数参数的平均值可变参数要实现必须得保证参数列表中至少有一个参数,否则无法使用va_list可变参数的实现过程: 形参实例化时给形参变量分配的地址是连续的,而且实例化时是从最右边的变量开始分配地址的,由于形参变量是分配在栈区
C语言可变参数函数的使用方法讲解
http://blog.chinaunix.net/uid-21736802-id-1817658.html 本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施。   VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。
C# 函数、委托和可变参数
using System; namespace ConsoleApp1 { //! 5 delegate int Max(int a,int b); class Program { public void show() { } //! 1 public void max()
js函数可变参数
js函数可变参数
C++可变参数函数
C++可变参数函数的三种实现方法:C风格实现,基于initializer_list,和基于模板。三种实现方法的比较和优缺点总结。
求任意多个数的最大值(利用可变参数列表)
#include <stdio.h> #include <stdarg.h>int Max(int n, ...) { int i = 0; int max = 0; va_list arg; va_start(arg, n); for (i = 0; i < n; i++) { int val = va_arg(arg,int);
c++-可变参数模板函数
有些时候我们需要处理不限定个数的参数,处理不同的数据类型,那么最好的解决办法就是可变参数模板,这是c++常用的,当然c语言中也有的。 代码如此#include <iostream> /*通用可变参数模板*/ //不加的错误:1>g:\visualstudio2013_projects\类型转换\函数可变参数通用模板\main.cpp(12) : error C2780 : “void showal
JS可变参数的使用:arguments
JS中可变参数的使用
Scala 可变参数函数的灵活调用
Scala 可变参数函数的灵活调用