[英]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.