UTF-8로 작성된 code를 gcc로 컴파일하려면 어떻게 해야 하나요?

kukyakya의 이미지

#include<stdio.h>

int main()
{
        printf("strlen("가나다") = %d\n",strlen("가나다"));
}

를 gcc로 컴파일하면

a.c: In function `main':
a.c:5: error: stray '\352' in program
a.c:5: error: stray '\260' in program
a.c:5: error: stray '\200' in program
a.c:5: error: stray '\353' in program
a.c:5: error: stray '\202' in program
a.c:5: error: stray '\230' in program
a.c:5: error: stray '\353' in program
a.c:5: error: stray '\213' in program
a.c:5: error: stray '\244' in program

이런 에러를 내는군요.

LANG, LC_* 는 모두 ko_KR.UTF-8 로 설정된 상태입니다. 검색해봐도 해결방법을 잘 모르겠습니다.

Prentice의 이미지

#include <stdio.h>
#include <string.h>

int main()
{
        printf("strlen(\"가나다\") = %d\n",strlen("가나다"));
}

이렇게는 해보셨나요?

아마 원하시는 대로 작동하지 않을 것입니다. 멀티바이트 문자를 지원하는 함수를 쓰셔야 할 거예요.

kukyakya의 이미지

아니 이런 어처구니 없는 실수를;;;

글을 지워버리고 싶을 정도로 창피하군요 :oops:

답변 감사합니다. 아무리 봐도 UTF-8 문제인 줄 알았는데, 의외로 다른 데에 문제가 있었네요. :shock:

musiphil의 이미지

strlen 함수의 반환값은 size_t이므로 "%d"를 그냥 쓰시면 안 되고, (int)로 캐스팅을 하시든지 size_t에 맞는 "%u" 또는 "%lu"를 쓰셔야 합니다. 물론 실질적으로는 문제가 발생할 확률이 매우 낮지만요. :-)