sprintf是格式化字符串最常用的方式。vsprintf可以很方便的使用va_list,对应的宽字符版本就是vswprintf。

在跨平台上使用vswprintf,于是噩梦开始了。

支持最好的当然是windows,一点问题都没有。

mac/ios上如果是宽字节的英文字符则是正常的,如果字符串中出现中文的话,就会失败。

android的NDK上首先不支持vswprintf,原因是wchar_t的size是4字节的.好吧,换个ndk版本,可以编译了之后,出现了和ios上一样的问题,不能出现中文字符,否则失败。

另外:

win32上有个更安全的版本:vswprintf_s

mac上有个vswprintf_l,没有测试过,不知道能否支持中文

ndk上没有vswprintf_l,似乎无解了,不知道转换成utf之后,使用vsnprintf是否可行。

=========================

补充:最后的解决办法,把宽字节转成utf8,然后用vsnprintf,完了再转回宽字节.至少能用,效率可能不太高,这种方法,所有平台都通用.