专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

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

发布时间:2011-06-28 16:18:04 文章来源:www.iduyao.cn 采编人员:星星草
求助一个关于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
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: