1

请告诉char16_t字符串操作函数的版本是什么

如:

http://www.tutorialspoint.com/ansi_c/c_function_references.htm

我找到了很多参考网站,但没有人提到这一点。

特别是对于打印功能,这是最重要的,因为它可以帮助我验证 Manipulation 功能是否有效。

#include <stdio.h>
#include <uchar.h>



char16_t *u=u"α";
int main(int argc, char *argv[])
{
    printf("%x\n",u[0]); // output 3b1, it is UTF16



    wprintf("%s\n",u); //no ouput
    _cwprintf("%s\n",u); //incorrect output

    return 0;
}
4

2 回答 2

2

要打印/读取/打开写入等,您需要使用该mbsrtowcs函数转换为 32 位字符。

对于所有意图和目的,char16_t 是一种多字节表示,因此,需要使用mbr函数来处理这种整数类型。

一些答案使用了完全不正确的 L“前缀”。16 位字符串需要 u“前缀”。

以下代码为您提供了使用 8、16 和 32 位字符串表示所需的一切。

#include <string.h>
#include <wchar.h>
#include <uchar.h>

<wchar.h>如果您没有手册页 (UNIX),您可以通过 Google 搜索找到的过程。

如果开销不是问题,Gnome.org 的 GLib 有一些很棒的代码供您使用。

char16_t并且char32_t是 ISO C11 ( iso9899:2011) 扩展。

于 2014-03-02T14:27:58.273 回答
0

wprintf并且它的 wchar 同事也需要在 wchar 中有 th 格式字符串: wprintf( L"%s\n", u);

对于 wchar L用作字符串文字的前缀。

编辑:

这是一个代码片段(在 Windows 上测试):

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <wchar.h>

void main()
{
    wchar_t* a = L"α";
    fflush(stdout); //must be done before _setmode
    _setmode(_fileno(stdout), _O_U16TEXT); // set console mode to unicode
    wprintf(L"alpha is:\n\t%s\n", a);      // works for me :)
}

控制台在 unicode 中不起作用并打印“?” 对于非 ascii 字符。在 Linux 中,您需要删除 和 之前的下划线setmode前缀fileno

注意:对于 windows GUI 打印,已经有适当的支持,因此您可以使用 wsprintf 格式化 unicode 字符串。

于 2013-11-29T21:47:31.267 回答