The evil C++ -- vsprintf, UNICODE, error output string

Before this time, I always believe building the program with UNICODE or non UNICODE flag only effect the programatic side, and won't effect the system behavior. The problem arose with mixing usage of multi-byte and unicode character set functionalities under the UNICODE base. Such as if the UNICODE is the base setting, then any multi-byte function's call may appear unpredictable behavior. Please take a look at the following example:

// we suppose the UNICODE is defined, but we still need to support the multi-byte string

void Log(const char * InFmt, ...)
{
    char buffer[256];
    // something is done.
    vsprintf(buffer, InFmt, valist);

    wprintf(MULTIBYTE_TO_UNICODE(buffer));
}

The output 'buffer' may not process the right string that you want, and the solution is at first convert all the string into Unicode style, and then use the Unicode function to process the string, such as:

// we suppose the UNICODE is defined, but we still need to support the multi-byte string

void Log(const char * InFmt, ...)
{

    // we are work under UNICODE try turn all the string value into Unicode style

    wchar_t buffer[256];

    // something is done.

    // and then use the UNICODE function to process string

    vswprintf(buffer, MULTIBYTE_TO_UNICODE(InFmt), valist);

    wprintf(buffer);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值