在OS X上遇到vwprintf / vswprintf问题

时间:2011-12-14 18:07:04

标签: c macos printf

为了提供更多细节,我使用C for OS X使用XCode 4.2和LLVM GCC 4.2.2编译器编写代码。

我有一个变量参数函数 - 我包含整个函数的完整性,虽然我/相信/大部分函数是无关紧要的,我唯一的问题是vswprintf在某些情况下的行为。

void FTFRenderText( const struct FTFFont* const pxFont,
               const int iStartX, const int iStartY,
               const wchar_t* const wszFormatString,
               ... )
{
    if( !pxFont || !( pxFont->mbValid ) )
    {
        return;
    }

    static wchar_t lswszBuffer[ 2048 ];    
    va_list xArguments;
    va_start( xArguments, wszFormatString );
    //
    // SE - TODO: remove
    vwprintf( wszFormatString, xArguments );
    va_end( xArguments );
    va_start( xArguments, wszFormatString );
    //
    vswprintf( lswszBuffer, 2048, wszFormatString, xArguments );
    va_end( xArguments );
    const struct FTFTriList xTriList =
        FTFCreateTriListFromText( pxFont, iStartX, iStartY, lswszBuffer );

    const int iIndexCount = xTriList.miNumIndices;
    if( iIndexCount )
    {
        // SE - TODO: something to allow user selected colour
        glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
        glVertexPointer( 2, GL_FLOAT, 0, xTriList.mpfVertices );
        glDrawElements(
            GL_TRIANGLES, iIndexCount, GL_UNSIGNED_SHORT, xTriList.mpsIndices );
    }
}

也许我昏暗但似乎如果我传递一组简单的参数,如“Test%d”,101这些函数运行正常。但是,如果我传入一个带有unicode字符的字符串,无论是作为文字还是使用\ uXXXX,我从vswprintf返回的字符串都是完全空的在调试器中我可以看到编译器已经用内存中的字符串做了正确的事情,它包含unicode字符 - 但是vswprintf写的字符串都是0。

与wprintf和vwprintf比较很有意思 - 因为两者似乎都按照我的预期运行,并从文字和\ uXXXX转义中产生预期的unicode字符。

我不愿意建议这个库是错误的,因为很多其他的库和应用程序已经建立在最佳状态,所以我认为我做错了什么,但我看不出它可能是什么...

非常感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:0)

从来没有回答,所以让我至少提供最可能的答案:

使用UTF-8。

OS X / iOS中的所有ansi字符串函数实际上都是伪装的utf-8函数。