我注意到了,而
#include <stdio.h>
wprintf( L"Hello, %s\n", "world" );
在Linux下使用标准glibc,同样的方法与newlib的工作方式不同。似乎newlib期望那里有“%s”的宽字符串,所以以下工作代替:
wprintf( L"Hello, %s\n", L"world" );
哪种行为是正确的?这是newlib中的错误吗?另外,有没有办法明确指定我想要一个“窄”字符串,而不是printf字符串格式说明符中的宽字符串?
答案 0 :(得分:2)
宽字符串(wchar_t *
)的正确格式说明符为%ls
,正常情况下,“窄”C字符串(char *
)为%s
。 glibc的实现是正确的。
答案 1 :(得分:1)
%ls
使用宽字符串的标准方法是正确的,%s
是使用窄字符串的标准方法。我不知道newlib,但是微软的wprintf
也错误地将%s
视为宽字符串,接受%hs
来明确指定一个窄字符串。它也适用于glibc,因为忽略了h
。如果您要定位MSVC,则可能需要使用%hs
。