使用 printf 将双字节字符串格式化为单字节字符串时:
printf("%ls\n", L"s:\\яшертыHello"); // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
显然,有些字符不能表示为 ascii 字符,所以有时我看到双字节字符变成“?”的行为。标记字符。但是,这似乎取决于特定的字符。对于上面的 printf,输出是:
s:\
我希望我可能会得到类似的东西:
s:\??????Hello
恐怕我已经失去了这个例子,但我认为对于一个字符串,当它遇到 unicode 字符时,将第一个字符串替换为“?” 然后放弃了剩下的。
所以,我的问题是,当您将宽字符串格式化为单字节字符串时会发生什么。此处的文档:http: //msdn.microsoft.com/en-us/library/hf4y5e3w.aspx说“字符显示到第一个空字符”。但是,我没有看到。这是 printf 中的错误,还是我在某处看到的行为记录在哪里,如果是,在哪里。
谢谢你的帮助。
更新
感谢人们为我提供使用 printf 的替代方案的回答。我将改用另一种方法,但出于好奇,我真的很感兴趣 printf 为什么没有可靠的记录行为。似乎它的实施者竭尽全力使这不起作用。