首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-26 
求助一个关于vsprintf的问题。多语言环境定义差不多是这样的WriteMsg(const char* i_format, ...){char buf

求助一个关于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

热点排行