0
我有以下C++代碼示例:C++ - 全球的setlocale作品,相同的語言環境傳遞給_vsnprintf_l不
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中包含LPCTSTR與擴展ASCII字符。命令// 1將其複製到緩衝區,如預期的那樣。命令// 2停止複製第129-161範圍內的第一個字符(這裏有少數例外)。
我想解決這個問題,而不改變進程的全局區域設置,但命令// 3像// 2一樣工作,爲什麼?我傳遞「C」語言環境,所以我期望從命令// 1產生效果。
默認情況下,我在英語Windows XP上使用波蘭語區域設置。