한글 파싱에 관한 질문입니다.

c9844043의 이미지

 {
    int     i=0;
    int     j;
    char    str[20]="가나다abc라마사";
    char    *tmp=str;
 
    char    s[20]={0,};
 
    for(j=0; j<3; j++)
    {
         if(*tmp & 0x80)
         {
             s[i]=*tmp;
             i++; tmp++;
             s[i]=*tmp;
         }   
         else
         {
             s[i]=*tmp;
         }   
         i++; tmp++;
     }   
 
     printf("%s\n", s);
 
     return 0;
 
 }

여기의 글을 보고 위와 같이 테스트를 한 번 해보았습니다.

근데 for 문에서 j<3 일때나, j<4 일 때나

출력은 '가나' 가 나옵니다.

제 생각에 j<3 일때는 '가나다' 가 출력이 되고 j<4 일때는 '가나다a' 가 출력되어야 할 것 같은데

왜 '가나'만 출력이 될까요?

답변 부탁드립니다.

Hyun의 이미지

아마 utf8로 저장되어있는 한글 문자열을 한글자씩 가져오는데서 문제가 있는거 같습니다.
utf8은 한 문자가 정해지지 않은 여러 바이트로 이루어집니다. 코드에서처럼 2바이트가 아니죠.(완성형이나 조합형은 항상 2바이트인테 반해...)

아래 utf8의 인코딩 방법을 참고해서 한 글자를 추출해내면 될 것 같습니다.
http://en.wikipedia.org/wiki/Utf8#Description