| 网站首页 | 资讯与应用频道 | 校区FTP | 校区FTP公告 | 大家学电脑 | 技术专区 | 游戏天地 | 下载专区 | 图片频道 | 问题提问与留言 | 协会相册 | 

 
载入中…



您现在的位置: 华师IT信息网 >> 资讯与应用频道 >> 技术专栏 >> 软件开发 >> C++ >> 正文
不怕溢出的 sprintf
  责任编辑:Eason     作者:Antiglos…    文章来源:蚂蚁的 C/C++ 标准编程    点击数:    更新时间:2008-3-9

#include <cassert>
#include <cstdarg>

#include <sstream>
#include <string>

using namespace std;

string& stringprintf( string &s, const char *fmt, ... )
{
    assert( s.empty() );

    va_list ap;
    va_start(ap, fmt);
    const char *next_c; // next character
    while ( *fmt != '\0' )
    {
        switch ( *fmt )
        {
            case '%':
            {
                next_c = fmt + 1;
                switch ( *next_c )
                {
                    case '\0':
                        s += *fmt;
                        break;
                    case '%':
                        s += '%';
                        ++fmt;
                        break;
                    case 's':
                        s += va_arg(ap, char*);
                        ++fmt;
                        break;
                    case 'd':
                    {
                        ostringstream oss;
                        oss << va_arg(ap, int);
                        s += oss.str();
                        ++fmt;
                        break;
                    }
                    case 'f':
                    {
                        ostringstream oss;
                        oss << va_arg(ap, double);
                        s += oss.str();
                        ++fmt;
                        break;
                    }
                    default:
                        assert( !"format unsupported." );
                        break;
                }

                break;
            }
            default:
                s += *fmt;
                break;
        }

        ++fmt;
    }
    va_end(ap);

    return s;
}

-----------------------------------------------------

测试一下

int main()
{
    string s;
    stringprintf(s, "int: %d, double: %f, str: %s", 18, 18.55, "test");
    cout << s << endl;
}

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
 
  • 上一篇文章:

  • 下一篇文章:
  •  
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    相关新闻
    没有相关文章
    最新留言
    点击排行
    推荐文章如何更换卡巴斯基的授权3797
    推荐文章怎样修复IE?2263
    推荐文章IPChanger,方便地更改您1800
    推荐文章关于"您是盗版软件受害者1770
    推荐文章QQ病毒U盘病毒专杀工具1490
    普通文章美国俄亥俄大学彻底封杀1282
    普通文章电脑爱好者协会简介1141
    推荐文章星光耀华师--第四届十大866
    普通文章电脑爱好者协会第二期电589
    普通文章本学期第一个电脑维修日528

    点击申请点击申请点击申请点击申请

    阿达的百度空间蓝点文学社华南师范大学南海校区华南师范大学陶园BBS公共艺术教研室华南师范大学国际合作交流项目南海校区排球协会飞硕网络科技
    点击申请点击申请点击申请点击申请点击申请点击申请点击申请点击申请

    协会简介    现任干部  - 友情链接 - 联系我们 - 版权申明 - 粤ICP备05135739号

    Copyright (C) 华南师范大学南海校区电脑爱好者协会 All Rights Reserved 2007-2008