“百分比”的变化行为s";在不同libc实现中的wprintf()中

“百分比”的变化行为s";在不同libc实现中的wprintf()中,c,unicode,printf,glibc,newlib,C,Unicode,Printf,Glibc,Newlib,我注意到这一点 #include <stdio.h> wprintf( L"Hello, %s\n", "world" ); 哪种行为是正确的?这是newlib中的一个bug吗?另外,有没有办法在printf字符串格式说明符中明确指定我想要的是“窄”字符串,而不是宽字符串?宽字符串(wchar\t*)的正确格式说明符是%ls,对于普通的“窄”C字符串(char*)是%s。glibc的实现是正确的。正确的是,%ls是使用宽字符串的标准方式,%s是使用窄字符串的标准方式。我不知道new

我注意到这一点

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

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

宽字符串(
wchar\t*
)的正确格式说明符是
%ls
,对于普通的“窄”C字符串(
char*
)是
%s
。glibc的实现是正确的。

正确的是,
%ls
是使用宽字符串的标准方式,
%s
是使用窄字符串的标准方式。我不知道newlib,但是微软的
wprintf
,也错误地将
%s
视为宽字符串,它接受
%hs
来显式指定窄字符串。它在glibc中也起作用,因为
h
被忽略。如果您的目标是MSVC,您可能希望使用
%hs


来源:

毕竟是newlib中的一个bug。谢谢
wprintf( L"Hello, %s\n", L"world" );