유닉스 솔라리스에서 .. 한글 문자열을 char 형 배열에 담아 처리하는데.
시행소\274 와 같이 깨지는 현상이 발생하는데.. 어떤경우는 안깨지고 어떤 경우는 깨지는데
원인은 어디에 있을까요? 꼭 마지막 글자에서 깨지는 경우가 가끔씩 발생합니다.
char형 배열을 2의 배수로 선언해서 해보세요.. 한글은 2바이트니까, 홀수로 선언했을 경우 끝의 글자가 1바이트로 되서 깨지겠죠..
혹시 isalpha 나 isspace등 is계열의 함수를 쓰지 않으시는지요?
그렇다면 함수대입시 꼭 (int) 형으로 casting을 하셔야 됩니다. man페이지를 보시면 대입형이 int로 되어있음.. 그냥 char로 선언해서 쓰면 한글영역은 7bit를 벗어나기 때문에 음의 엉뚱한 값이 들어가게 됩니다. linux에서는 안그런데 solaris에서는 그렇더군요. unsigned char 형으로 선언하면 꼭 (int)로 casting 할 필요는 없을것 같은데 만일에 대비해서 꼭 int로 casting 잊지마세요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: C에서 한글문자열 처리중에 한글이 깨집니다.
char형 배열을
2의 배수로 선언해서 해보세요..
한글은 2바이트니까,
홀수로 선언했을 경우
끝의 글자가 1바이트로 되서
깨지겠죠..
Re: C에서 한글문자열 처리중에 한글이 깨집니다.
혹시 isalpha 나 isspace등 is계열의 함수를 쓰지 않으시는지요?
그렇다면 함수대입시 꼭 (int) 형으로 casting을 하셔야 됩니다.
man페이지를 보시면 대입형이 int로 되어있음..
그냥 char로 선언해서 쓰면 한글영역은 7bit를 벗어나기 때문에
음의 엉뚱한 값이 들어가게 됩니다. linux에서는 안그런데
solaris에서는 그렇더군요.
unsigned char 형으로 선언하면 꼭 (int)로 casting 할 필요는
없을것 같은데 만일에 대비해서 꼭 int로 casting 잊지마세요.
댓글 달기