读书人

一个关于vsprintf的有关问题。多语言环

发布时间: 2012-02-26 20:19:45 作者: rapoo

求助一个关于vsprintf的问题。多语言环境
定义差不多是这样的
WriteMsg(const char* i_format, ...)
{
char buffer[TMCJNLCteMAX_SIZE_MSG];
va_list va_alist;
int retour = 0;
int journal_level = CteLEVEL_NO;

{
// récupération des informations en entrée
va_start(va_alist, i_format);

vsprintf(buffer, i_format, va_alist);
va_end(va_alist);

puts(buffer);

retour = TMCJNLManager::getInstance()->writeMsg(buffer);
}
return(retour);
}

是在法语系统下写的程序到汉语或日语下出问题。
运行到va_start之后vsprintf之前就crash了。
而且当且仅当传递的参数的最后一个字符是带法语音调的才崩溃,其他情况都没问题。
比如

TMCJNLWriteMsg("open catproduct trouvé");

请问有高人有类似经验吗?


[解决办法]
TMCJNLWriteMsg("open catproduct trouvé");
不要这样调用

改为TMCJNLWriteMsg("%s", "open catproduct trouvé");
[解决办法]

探讨
TMCJNLWriteMsg("open catproduct trouvé");
不要这样调用

改为TMCJNLWriteMsg("%s", "open catproduct trouvé");

[解决办法]
考虑这样一个例子
printf("abc%s"); // 通常会core掉,因为没有%s对应的参数
printf("%s", "abc%s"); // 正确,输出abc%s

读书人网 >C语言

热点推荐