1

我注意到虽然

#include <stdio.h>
wprintf( L"Hello, %s\n", "world" );

与 Linux 下的标准 glibc 一起工作,同样的事情与 newlib 的工作方式不同。似乎 newlib 期望那里有 "%s" 的宽字符串,因此可以使用以下方法:

wprintf( L"Hello, %s\n", L"world" );

哪种行为是正确的?这是newlib中的错误吗?另外,有没有办法在 printf 字符串格式说明符中明确指定我想要一个“窄”字符串,而不是一个宽字符串?

4

2 回答 2

2

wchar_t *宽字符串 ( )的正确格式说明符是%ls,对于正常来说,“窄”C 字符串 ( char *) 是%s。glibc 的实现是正确的。

于 2013-01-11T06:35:02.533 回答
1

%ls使用宽字符串的标准方法是正确的,并且%s是使用窄字符串的标准方法。我不知道 newlib,但是 Microsoft 的wprintf,它也错误地认为%s是宽字符串,接受%hs显式指定窄字符串。它也适用于 glibc,因为h被忽略了。如果您完全针对 MSVC,则可能需要使用%hs.

资料来源:http ://en.chys.info/2009/06/wprintfs/

于 2014-02-15T15:06:02.513 回答