求助一个关于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é");
[解决办法]
[解决办法]
考虑这样一个例子
printf("abc%s"); // 通常会core掉,因为没有%s对应的参数
printf("%s", "abc%s"); // 正确,输出abc%s