안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.
링크에러 22 라는 것은 아마도 빌더의 버그인것 같습니다.
sprintf는 printf처럼 지정해준 포맷을 화면이 아닌 버퍼로 저장하는 함수입니다.
"%02d : " 라고 했으니, 만약 인덱스를 11이라고 줬다면 저장되는 문자열은
"11 : " 이라고 되었겠지요? 이게 총 다섯 문자인데, 이 문자들 외에 마지막에
문자열의 끝을 표시하는 널 값이 추가되므로 총 여섯바이트가 필요한 겁니다.
그런데.. 이와 같은 방식에도 문제는 있습니다. 원래 소스가 좀 단순하게 생각하고
작성한거군요. 만약 콤보박스의 아이템 갯수가 100개 이상이라서 index가 99이상
넘어갈 경우가 생긴다면, sprintf는 값을 변경시키지 않기 위해 100번째, 101번째는
100, 101이라는 값이 그대로 들어갈겁니다. 그럼 당연히 다시 한바이트가 모자랍니다.
또한 1000번째가 넘는 아이템이 있다면 두바이트가 모자라겠지요? 아마도 소스의
원작자가 생각을 많이 하지 않았든지, sprintf에서 지정한 %02d를 쓰면 반드시
두개의 숫자만 지정된다고 생각했든지.. 둘중의 하나이군요.
그럼 참고하시길...
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
|