使用printf将双字节字符串格式化为单字节字符串时:
printf("%ls\n", L"s:\\??????Hello"); // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
Run Code Online (Sandbox Code Playgroud)
显然,有些字符不能表示为ascii字符,所以有时我看到双字节字符变成'?'的行为.标记字符.但是,这似乎取决于特定的角色.对于上面的printf,输出是:
s:\
Run Code Online (Sandbox Code Playgroud)
我希望我可以得到类似的东西:
s:\??????Hello
Run Code Online (Sandbox Code Playgroud)
我担心我已经失去了这个例子,但是当我遇到unicode字符时,我想一个字符串,用'?'替换第一个字符串 然后放弃了其余的.
所以,我的问题是,当您将宽字符串格式化为单字节字符串时应该发生什么.这里的文档:http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx说"字符显示到第一个空字符".但是,我没有看到.这是printf中的一个错误,还是我在某处记录的行为,如果有的话,在哪里.
谢谢你的帮助.
UPDATE
感谢人们给我替代使用printf的答案.我将改为另类,但出于好奇,我真的很感兴趣为什么printf没有可靠的记录行为.看起来好像它的实现者竭尽全力使它不起作用.