반응형

strncpy_multi( )

int strncpy_multi(char *dest, const char *src, int copy_size)

문자열을 copy할 때에 주로 사용하는 strncpy()함수는 2바이트 한글이 중간에 잘려서 데이터가 깨지는 문제가 발생합니다. 이를 방지하기 위하여 한글이 2바이트 중, 앞바이트만 잘리는 경우에 1바이트 적게 복사하여 데이터의 한글 잘림을 방지하는 함수입니다.  

 

KSC5601 한글, CP949(또는 MS949, WIN949) 데이터처럼 2바이트 한글을 사용하는 문자열에서 사용가능합니다.

 

 

파라미터

dest
    - 데이터를 복사할 buffer (copy_size 보다 1이상 크게 메모리가 잡혀야 함.)
src
    - 원본 데이터. 
copy_size
    - 데이터를 복사할 size

 

RETURN

0이상
    - 실제로 복사한 데이터 크기. (0이면 복사한 데이터가 없음)

※ 주의: buf의 크기는 copy_size + 1 이상의 크기로 설정해야 합니다. 항상 null terminated 문자열을 보장합니다.

 


Source 구현

 

int strncpy_multi(char *dest, const char *src, int copy_size)
{
    int size = 0;

    if(src == NULL || *src == 0x00) {
        dest[0] = 0x00;
        return 0;
    }

     for(size = 0; size < copy_size && *src; size++, src++) {
        /* 한글을 만났을 때 */

        if(*src & 0x80) { 
            if(size + 1 < copy_size) {
                dest[size] = *src;
                size++;
                src++;
                dest[size] = *src;
            } else {
                /*
                * copy_size에서 한글이 앞바이트와 뒤 바이트가 잘릴 것 같으면
                * 1바이트 적게 복사함.
                */
                break;
            }

        } else {
            dest[size] = *src;
        }
    }

    dest[size] = 0x00;

    return size;
}

 


 

 

source download : 

strncpy_multi.c
0.00MB

 

 

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,