佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1120|回复: 3

关于vararg 问题:

[复制链接]
发表于 15-12-2008 09:09 AM | 显示全部楼层
哎呀,沒注意到b不可以改這點,那就是說只有sprintf提供呼叫而沒有vsprintf可以直接呼叫的情況了
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 12-12-2008 04:58 PM | 显示全部楼层 |阅读模式
怎么把一个函数的 var args ,呼唤 另一个函数 which also 接受 var args
因为  "..." 是 多个东西,不是 一个东西

例如:

void b( char *arg1, ...);

void a( char *arg1, ... ) {            
    va_list ap;      
    va_start(ap, arg1);
      ..               
    b( arg1, ...) (<--- 这里怎么把 a 的 "..." call b 时整个丢进去 ?)            
              ..
     va_end(ap);
}


假设b 不可以改。
该不会要我一个一个 自己塞进stack 吧。。。

[ 本帖最后由 tensaix2j 于 12-12-2008 05:04 PM 编辑 ]
回复

使用道具 举报

发表于 15-12-2008 09:06 AM | 显示全部楼层
int sprintf (char * szBuffer, const char * szFormat, ...)
{
        int     iReturn ;
        va_list pArgs ;
        va_start (pArgs, szFormat) ;
        iReturn = vsprintf (szBuffer, szFormat, pArgs) ;
        va_end (pArgs) ;
        return iReturn ;
}

你可以提供两个版本的函数,一个接受...,一个接受va_list
然后...版本是呼叫va_list版本,就像sprintf跟vsprintf一样
也就是把处理的部分弄成另外一个函數是接受va_list的
比如說寫一個MessageBoxf的函數,不是呼叫sprintf而是直接呼叫vsprintf處理傳進去的va_list
回复

使用道具 举报

 楼主| 发表于 30-12-2008 09:47 AM | 显示全部楼层
那没办法咯,只好改b

谢了, christiano
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 20-12-2025 12:46 PM , Processed in 0.116971 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表