免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1775 | 回复: 13
打印 上一主题 下一主题

可变参数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-28 16:24 |只看该作者 |倒序浏览
int write_trace(char *fmt,va_list va)
{
       
        if (strcmp(main_para,"-t" == 0)
        {       
                        fprintf(fp_trace,fmt,va);
        }
       
}

这样一个想写trace的文件,
在fmt中含有%f这样的格式化参数时,参数不能带过来

论坛徽章:
0
2 [报告]
发表于 2004-12-28 16:43 |只看该作者

可变参数的问题

当 write_trace("trace:interface_id :[%.0f],order_type:[%s]\n",
     10000,"R";

的时候,输出时trace:interface_id [R],order_type:[]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-12-28 17:04 |只看该作者

可变参数的问题

int write_trace(char *fmt,va_list va)

是这样用的吗?

论坛徽章:
0
4 [报告]
发表于 2004-12-28 17:50 |只看该作者

可变参数的问题

原帖由 "aero" 发表:
int write_trace(char *fmt,va_list va)

是这样用的吗?


用法和printf一样

论坛徽章:
0
5 [报告]
发表于 2004-12-28 18:08 |只看该作者

可变参数的问题

环境是aix52
C for AIX Compiler, Version 6

论坛徽章:
0
6 [报告]
发表于 2004-12-28 18:41 |只看该作者

可变参数的问题

给你个例子:
void Write_Log( const char *format, ... )
{
  char *cp_File = "domain_modify.log";
  FILE *fp;     
  char cp_WriteInfo[ 255 ] = { 0 };
  va_list otherarg;
      
  if(( fp = fopen( cp_File, "a" )) == NULL )
  {
    printf( "Open file[%s] error\n", cp_File );
    return;
  }
  
  memset( cp_WriteInfo, 0x00, 255 * sizeof( char ) );
  va_start( otherarg, format );
  vsprintf( cp_WriteInfo, format, otherarg );
  va_end( otherarg );
  
  //printf( "cp_WriteInfo = [%s]\n", cp_WriteInfo );
   
  if( fputs( cp_WriteInfo, fp ) == EOF )
  {
    printf( "Write Log error!\n" );
  }

  fclose( fp );
}
调用时
Write_Log( "[RIGHT]omain[%s] info equal to userbox info!\n\n", pc_DomainName );
和printf一样

论坛徽章:
0
7 [报告]
发表于 2004-12-28 19:49 |只看该作者

可变参数的问题

原帖由 "killam" 发表:
equal to userbox info!\n\n", pc_DomainName );
和printf一样


我这里,如果参数中有浮点型数据,格式化字符串中有%f,
那个浮点型数据就带的不过来

论坛徽章:
0
8 [报告]
发表于 2004-12-28 20:14 |只看该作者

可变参数的问题

好像不支持%f,可以用sprintf等先转化成字符串,再调用。
不好意思。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-12-28 20:42 |只看该作者

可变参数的问题

原帖由 "partwithhook"]当 write_trace("trace:interface_id :[%.0f],order_type:[%s 发表:
\n",
10000,"R";

的时候,输出时trace:interface_id [R],order_type:[]

打死也不相信会有这样的结果出来!
用可变参数的时候必须明确数据的类型,特别是常量的时候
把10000改成10000.0就可以
  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #include <stdarg.h>;

  4. void logmsg(char *strMsg, ...)
  5. {
  6.     va_list  aplist;

  7.     va_start(aplist, strMsg);

  8.     vfprintf(stderr, strMsg, aplist);
  9.     fprintf(stderr,"\n");

  10.     va_end(aplist);
  11. }

  12. main()
  13. {
  14.     logmsg("f=[%.0f]\n", 100.0);
  15. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-12-28 22:39 |只看该作者

可变参数的问题

原帖由 "partwithhook" 发表:


用法和printf一样


^_^,详细看看va_list是一个什么样的宏吧。然后看看可变参数的实现原理。这样用才怪。

偶的blog上有一篇详细论述可变参数的blog,可以来看看。CU上偶也发过。这个问题上,偶还有一个疑问呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP