취미 생활로 혼자 만들고 있는 조그마한 성경 구절 찾아서 캔버스에 비출수 있는 프로그램 코딩중. 이상한 버그를 발견했는데...
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.
나는 그렇게 신중한 프로그램을 만드는 사람이 아니니, 사용하지말자. 이 함수를...