簡體   English   中英

C ++-全局setlocale有效,傳遞給_vsnprintf_l的相同語言環境不起作用

[英]C++ - global setlocale works, the same locale passed to _vsnprintf_l doesn't

我有以下C ++代碼示例:

void SetVaArgs(const char* fmt, const va_list argList)
{
  setlocale( LC_ALL, "C" );

  // 1
  m_FormatBufferLen = ::_vsnprintf(m_FormatBuffer, Logger::MAX_LOGMESSAGE_SIZE, fmt, argList); 

  setlocale( LC_ALL, "" );

  //2
  m_FormatBufferLen = ::_vsnprintf(m_FormatBuffer, Logger::MAX_LOGMESSAGE_SIZE, fmt, argList);

  _locale_t locale = _create_locale(LC_ALL, "C");;

  //3
  m_FormatBufferLen = ::_vsnprintf_l(m_FormatBuffer, Logger::MAX_LOGMESSAGE_SIZE, fmt,locale, argList);

arglist包含具有擴展ascii字符的LPCTSTR。 命令// 1將其復制到緩沖區,如預期的那樣。 命令// 2停止復制范圍129-161中的第一個字符(那里很少有例外)。

我想在不更改進程的全局語言環境的情況下解決此問題,但是命令// 3的作用類似於// 2,為什么? 我正在傳遞“ C”語言環境,所以我期望從命令// 1生效。

默認情況下,我在英語Windows XP上使用波蘭語區域設置。

事實證明,這是VS2005及更高版本(2008和2010)中的CRT錯誤。 在此處提交給Microsoft: https//connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 523503#details

錯誤適用於_sprintf_l,_vsnprintf_l,_sprintf_s_l,_vsnprintf_s_l以及其他親戚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM