printfがワイド文字(wchar_t
)でどのように機能するのかを理解しようとしています。printfでワイド文字を表示する
サンプル1:
は#include <stdio.h>
#include <stdlib.h>
int main(void)
{
wchar_t *s;
s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
s[0] = 42;
s[1] = 0;
printf("%ls\n", s);
free(s);
return (0);
}
出力:
*
すべてがここに罰金です:私のキャラクター(*
)が正しくあり
私は、次のコードサンプルを作りました表示されます。
サンプル2:
他の種類の文字を表示したかったのですが、私のシステムでは、wchar_t
は4バイトでエンコードされているようです。 、s[0]
(0xC389、201のために(参照、前のリンクを) É
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
wchar_t *s;
s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
s[0] = 0xC389;
s[1] = 0;
printf("%ls\n", s);
free(s);
return (0);
}
しかし、この時間は、私は「エンコーディング」セクションから多くの値を試みた出力がない。だから私は、次の文字を表示しようとしました0xC9)...しかし、私はÉ
文字を表示することはありません。私も%ls
の代わりに%S
で試しました。
このようにprintfを呼び出そうとすると:printf("<%ls>\n", s)
唯一の文字が表示されます'<'
、表示が切り捨てられます。
なぜこの問題がありますか?どうすればいいですか?
2つの要素の配列を宣言する代わりに動的に割り当てる理由はありますか? –
'scanf("%1ls ")' a '"É "'を読んで、 'printf("%lX \ n "、(unsigned long)s [0])'の値を報告してください。 – chux
@chux 'printf("%ld \ n "、(unsigned long int)L'É ');'私に '201'を与えます。 – vmonteco