gpt4 book ai didi

c - OS X 上的 vwprintf/vswprintf 问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:24 25 4
gpt4 key购买 nike

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

我有一个可变参数函数 - 为了完整起见,我包含了整个函数,尽管我/相信/其中大部分是无关紧要的,我遇到的唯一问题是 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 字符。

我不愿意暗示这个库有问题,因为大量其他库和应用程序已经在上面构建得很好,所以我认为我做错了什么,但我看不出它可能是什么...

如有任何建议或帮助,我们将不胜感激。

最佳答案

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

使用 UTF-8。

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

关于c - OS X 上的 vwprintf/vswprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8509472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com