한글이 포함된 문자열을 특정 byte로 자르기


한글이 포함된 문자열의 경우에 한글 중간에 끊기지 않도록 left 함수를 구현 했다.
유니코드 한글을 구분하기 위해서는 메크로 함수를 수정해 주어야 한다.

#include <stdio.h>
    
#define IsHangle(c)  ((unsigned char)(c) > 0x7f)

char* left(char* sz, int len)
{
    int i = 0;
    
    if ( strlen(sz) <= len ) return sz;
    
    for (i=0; i<len; i++)
    {
        if ( IsHangle(sz[i]) )    
        {
            if ( len-1 < i+1 ) break;
            else  i++;
        }
    }
    
    sz[i] = 0;
    
    return sz;
};

int main()
{
    char *szOrg="11가핳a안녕하세요abcdef우하하1";
    char buf[256]="";
    int i;

    printf("Org: %s(%d)\n", szOrg, strlen(szOrg) );
    for(i=0; i<=strlen(szOrg); i++)
    {
        strcpy( buf, szOrg );
        printf( "%02d, %s\n", i, left(buf, i) );
    }
    return 0;
}