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 については知りませんが、同じくワイド文字列を意味するものとしてwprintf誤って扱うMicrosoft の は、ナロー文字列を明示的に指定することを受け入れます。が無視されるため、glibc でも機能します。MSVC をターゲットにしている場合は、.%s%hsh%hs

ソース: http://en.chys.info/2009/06/wprintfs/

于 2014-02-15T15:06:02.513 に答える