Проблема с vwprintf / vswprintf на OS X - PullRequest
2 голосов
/ 14 декабря 2011

Чтобы дать более подробную информацию, я пишу код, используя C для 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, имеет все 0s.

Сравнение с wprintf и vwprintf интересно - потому что оба, кажется, ведут себя так, как я ожидаю, и производят ожидаемый символ Unicode из обоих литералови \ uXXXX ускользает.

Я не хочу утверждать, что библиотека глючит, потому что множество других библиотек и приложений были построены на вершине просто отлично, так что я думаю, что я делаю что-то не так, но я простоне могу понять, что это может быть ...

Буду признателен за любые предложения или помощь.

1 Ответ

0 голосов
/ 09 февраля 2016

Ответа не было, поэтому позвольте мне, по крайней мере, предоставить самый небрежный из возможных:

Использовать UTF-8.

Все функции строки ANSI в ОСX / iOS на самом деле являются скрытыми функциями utf-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...