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)
인쇄 된 문자는 '<'
이고 표시가 잘립니다.
왜이 문제가 있습니까? 어떻게해야합니까?
두 요소의 배열을 선언하는 대신 동적으로 할당하는 이유가 있습니까? –
'printf ("% lX \ n", (unsigned long) s [0])'에 대해'scanf ("% 1ls")'a' "É"'를 읽고 어떤 값을보고해라. – chux
@chux'printf ("% ld \ n", (부호없는 long int) L' É ');'나에게'201'을줍니다. – vmonteco