취미 생활로 혼자 만들고 있는 조그마한 성경 구절 찾아서 캔버스에 비출수 있는 프로그램 코딩중. 이상한 버그를 발견했는데...

1:5 절을 입력하면,

1) prototype query에선 1:5절이 출력되는데
2) 바로 연이어 new query를 실행하면 15 가 출력이 되었다.

재미있는 현상이라 무시할 수 가 없어서 라인 별로 따라가 보니..
strtok를 사용한 함수 이후에 delimiters 로 정의내린 것을 제외한
나머지가 원본의 문서를 바꾸는 것을 발견했다.

뭐 그래서

1) 구글링 with strtok modify original string

https://www.securecoding.cert.org/confluence/display/cplusplus/STR06-CPP.+Do+not+assume+that+strtok%28%29+leaves+the+parse+string+unchanged


2) man strtok
BUGS
        Avoid using these functions.  If you do use them, note that:

              These functions modify their first argument.

              These functions cannot be used on constant strings.

              The identity of the delimiting character is lost.

              The strtok() function uses a static buffer while  parsing,  so  it’s  not
              thread safe.  Use strtok_r() if this matters to you.


나는 그렇게 신중한 프로그램을 만드는 사람이 아니니, 사용하지말자. 이 함수를...



'Computer > linux' 카테고리의 다른 글

FAT32 format in Linux  (0) 2010.10.31
strtok을 사용하지 말자.  (0) 2010.08.24
awk with a running average and sample deviation  (0) 2010.08.18
emacs 한글 폰트 및 한글 입력  (0) 2010.07.22
posted by citadel