오늘 친구 녀석이 Notepad++에서 CSS 파일이 안열린다고 하더군요.
그래서 해보니 진짜 CSS 파일이 열리지 않았습니다.
디버깅을 해보니 CSS 파일을 파싱하는 함수에서 사용한 isalnum에서 오류가 발생하더군요. isalnum은 영문이나 숫자인 경우에 0이 아닌 값을 반환하는 함수입니다. 로케일이 잘못 설정되어 있을때 한글을 이 함수에다 집어 넣으면 오동작을 한답니다. 콘솔 프로그램을 만든 다음 아래 코드를 컴파일해서 실행하면 ASSERT 경고가 뜨는 것을 볼 수 있을 겁니다.
char \*str = "안녕하세요";
isalnum(str[0]);
따라서 한글을 사용하기 위해서는 반드시 로케일을 적절하게 설정해 주어야 합니다. 아래와 같이 수정을 하면 오류가 뜨지 않는 것을 볼 수 있습니다. setlocale 함수는 CRT 로케일 설정을 변경하는 함수로 프로그램 시작 시에 한번만 설정해주면 됩니다.
setlocale(LC\_ALL, "");
char \*str = "안녕하세요";
isalnum(str[0]);
Notepad2 2.0.18 버전은 새로 컴파일한 실행 파일을 사용하시면 됩니다.
Notepad++은 실행 파일 폴더에 SciLexer.dll을 덮어쓰면 됩니다.
notepad2.zip | SciLexer.zip |