- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为了提供更多细节,我正在使用 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/
使用 10 月 2 日发布的 Symbian S60 第 5 版 SDK,我正在编译/运行(在 sim 上)以下代码片段: void test(wchar_t *dest, int size, con
我仍然是 C 的新手,甚至对 C 中的宽字符更陌生。 下面的代码应该显示 蓝 Sprite 4分 但它显示 蓝 Sprite 4分 在 gdb 中,我看到这个: (gdb) p buffer $1 =
有谁知道什么时候可以使用 vswprintf_l 而不是 vswprintf ? 谢谢 最佳答案 不同之处在于,vswprintf_l 在末尾添加一个 locale_t 类型的额外参数。这意味着您可以
我有以下示例程序,它使用预处理器定义一个简单的调试函数。 main.c #include #ifdef DEBUG #define __DEBUG 1 #else #define __DEBUG 0
我正在尝试使用 MinGW 在 Windows 上编译 Botan,但在编译期间收到以下错误: c:\qt\2010.04\mingw\bin\../lib/gcc/mingw32/4.4.0/inc
我有一个使用 _vscwprintf()/vswprintf() 的项目(通过 _vsctprintf()/_vstprintf()) 在 malloc()ed 缓冲区中创建任意长度的格式化字符串。
到目前为止,我已经在 visual studio 中编写了所有代码,现在我需要向其中添加一些 UI,因此我将使用 Qt。所以我在我的项目中添加了每个文件(主类除外),然后尝试使用 Qt 编译它。因为我
使用 Borland C++ Builder 2009 我根据 RAD Studio 的帮助 (F1) 使用 vswprintf : int vswprintf(wchar_t *buffer, co
为了提供更多细节,我正在使用 XCode 4.2 和 LLVM GCC 4.2.2 编译器使用 C 为 OS X 编写代码。 我有一个可变参数函数 - 为了完整起见,我包含了整个函数,尽管我/相信/其
我需要为格式函数 vswprintf() 分配足够的缓冲区。当用 ANSI 字符串做同样的事情时,我使用: vsnprintf( NULL, NULL, pszFormat, args ); 它返回我
我从 vswprintf 使用 GCC 和 Mac OS X(在 Mac OS X 10.6 和 10.8 下使用 gcc 4.0 和 4.2.1 测试。Linux 下的 GCC 是不受影响。Visu
我需要实现一个函数来格式化宽字符字符串并返回 std::wstring。我的实现是: std::wstring format(const wchar_t* fmt, ...) { std::w
我是一名优秀的程序员,十分优秀!