免费注册 查看新帖 |

Chinaunix

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

变长参数函数接口实现的问题,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-06 15:53 |只看该作者 |倒序浏览
3可用积分
请教大虾,在Linux上如何实现下面变长参数接口函数,谢谢!

FTwprintf( unsigned short * str,  int n, const unsigned short* format,... )

这两天搞的头大了,多谢!悬赏!!!

论坛徽章:
0
2 [报告]
发表于 2007-09-06 16:00 |只看该作者
原帖由 x518889 于 2007-9-6 15:53 发表
请教大虾,在Linux上如何实现下面变长参数接口函数,谢谢!

FTwprintf( unsigned short * str,  int n, const unsigned short* format,... )

这两天搞的头大了,多谢!悬赏!!!



可以参考main函数入口参数的实现

论坛徽章:
0
3 [报告]
发表于 2007-09-06 16:06 |只看该作者
原帖由 x518889 于 2007-9-6 15:53 发表
请教大虾,在Linux上如何实现下面变长参数接口函数,谢谢!

FTwprintf( unsigned short * str,  int n, const unsigned short* format,... )

这两天搞的头大了,多谢!悬赏!!!

va_list
va_start va_arg va_end
如果你准备用vprintf系列函数,就比较简单。
否则,你得自己解析format中的格式化字串。

论坛徽章:
0
4 [报告]
发表于 2007-09-06 16:10 |只看该作者
谢谢!楼上能说的明白一点吗,因为我是给第三方提供的接口,由他们调用的,所以这种方法不知道能不能行,如果可以的话,楼上能举个例子吗,非常感谢!我试着用va_list系列宏,好像不管用,我的开发环境是在Linux上。

论坛徽章:
0
5 [报告]
发表于 2007-09-06 16:23 |只看该作者
原帖由 web_surf 于 2007-9-6 16:06 发表

va_list
va_start va_arg va_end
如果你准备用vprintf系列函数,就比较简单。
否则,你得自己解析format中的格式化字串。

这种方法我也试验过,我的代码如下(本人还是觉得有问题):
int FTwprintf( unsigned short * str,  int n, const unsigned short* format,... )
{
     char *Cformat = Misc::locale_from_utf16( format );   //我自己用来转换函数,已经调试过绝对ok.

     char buf[256];
      int retval;
      va_list vs;
     
       va_start(vs, format);
       retval = vsprintf( buf, Cformat, vs );  //这里直接用format代替Cformat,编译不通过
     str = smMisc::locale_to_utf16(buf);  //这个函数也绝对可以信得过。
     va_end(vs);

        return retval;
}

论坛徽章:
0
6 [报告]
发表于 2007-09-06 16:27 |只看该作者
原帖由 x518889 于 2007-9-6 16:10 发表
谢谢!楼上能说的明白一点吗,因为我是给第三方提供的接口,由他们调用的,所以这种方法不知道能不能行,如果可以的话,楼上能举个例子吗,非常感谢!我试着用va_list系列宏,好像不管用,我的开发环境是在Linux上。



你是怎么用的?

论坛徽章:
0
7 [报告]
发表于 2007-09-06 16:33 |只看该作者
原帖由 web_surf 于 2007-9-6 16:27 发表



你是怎么用的?

就是上面的帖子所描述的,我想请教一下,在上面的代码中,如果要改用va_arg()能实现吗,我写了一段测试代码结果用运行到
format就dump了,晕。
谢了!

论坛徽章:
0
8 [报告]
发表于 2007-09-06 16:37 |只看该作者
有一个类似的接口
int FTId(unsigned short *Ids, unsigned short id,...);
我用va_arg()实现了就没问题,搞不清楚为什么上面的接口实现不行!

论坛徽章:
0
9 [报告]
发表于 2007-09-06 16:45 |只看该作者
原帖由 程序情人 于 2007-9-6 16:00 发表



可以参考main函数入口参数的实现

刚才看错了,这到是个好主意,我先研究一下,谢谢!

论坛徽章:
0
10 [报告]
发表于 2007-09-06 16:48 |只看该作者
原帖由 x518889 于 2007-9-6 16:23 发表

这种方法我也试验过,我的代码如下(本人还是觉得有问题):
int FTwprintf( unsigned short * str,  int n, const unsigned short* format,... )
{
     char *Cformat = Misc::locale_from_utf16( format  ...

估记你得修改你的接口了,让format为char*型
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP