免费注册 查看新帖 |

Chinaunix

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

高手们帮我看看va_list的用法错在什么地方? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-20 15:47 |只看该作者 |倒序浏览
我写了这两个函数,他们的声明和实现是这样定义的:
bool Func1(char *arg1, ...);
bool Func2(char *arg1, ...);

bool Func1(char *arg1, ...)
//Func1函数的目的是为了调用Func2函数,参数结构不可变{
        va_list ap;
        va_start(ap, arg1);
        if (!Func2(arg1, ap))
            return false;
        va_end(ap);
        return true;
}

bool Func2(char *arg1, ...)
//Func2函数的目的是为了获得该函数的参数的值,即取出每一个参数的值
//参数结构不可变
{
        char argArray[1000] = "";
        char *pTmp = NULL;
        va_list list;

        pTmp = arg1;

        va_start(list, arg1);

        while (pTmp != NULL)
        {
                sprintf(argArray, "%s|", pTmp);
                pTmp = va_arg(list, char *);
        }
        
        va_end(list);

        printf("%s\n", argArray);

        return true;
}

int main()
{
        Func1("123", "234", "345", (char *)NULL);
        return 0;
}

该程序的输出是:
123|8!@|8!@|?|棠3繻脣聙=| @|123|234|345|我这个程序需要得到的结果应该是:
123|234|345|才对,为什么中间有这些不该有的乱字符啊?
(说明:函数Func1和Func2的参数结构不能修改,两个函数送的参数都是无限制的,最后以NULL结束)。
请高手们指教小弟一下,这里先谢了。如果有什么更好的方法可以实现这个功能,还请指教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP