'strncpy'에 해당되는 글 1건

  1. 2007/11/20 일본어 윈도우에서 신기한 strncpy의 동작
어제 오늘 황당한 버그에 시달렸는데 찾아낸 결과가 너무나 황당해서 기록하고 넘어간다. 우선 아래의 소스 코드를 보자.

int _tmain(int argc, _TCHAR* argv[])
{
    std::string anchor = "앵커빌";
    char temp[128] = {0, };

    _tcsncpy(temp, anchor.c_str(), 128);

    if ( !strcmp(temp, anchor.c_str()) )
        std::cout << "OK" << std::endl;
   
else
       
std::cout << "OOPS" << std::endl;

    return 0;
}

출력 결과를 예측하기는 어렵지 않지만, 이걸 일본어 윈도우에서 돌리면 "OOPS"를 출력한다.

일본어 윈도우에서 돌아가는 프로그램에 한글이 들어가 있다고 버럭하고 화를 낼 사람도 있을지 모르겠지만, "앵커빌" 이라는 문자들이 단순한 바이트의 나열이라고 생각한다면 있을 수 없는 일이다.

strncpy의 소스를 봐도 단순한 바이트 단위의 복사에 불과하다.
    while (count && (*dest++ = *source++))    /* copy string */
       
count--;

여기서 진짜 웃긴 건 저 strncpy를 strcpy로 바꾸면 한/영/일문 윈도우에서 모두 ok를 출력한다는 사실이다. strcpy와 strncpy의 문자 카피 로직은 똑같은데도 말이다.
Posted by 조성경 트랙백 0 : 댓글 0