2010-01-05 11 views
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上使用波蘭語區域設置。

回答

相關問題