L“%S”와 같은 넓은 스트링 두통을 찾는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1473183

  •  16-09-2019
  •  | 
  •  

문제

다음은 두통 중 하나의 예입니다.

화면에 텍스트를 렌더링하기 위해 대부분 유니 코드 문자열을 사용하는 멀티 플랫폼 프로젝트가 있습니다. VC ++의 Windows에서 라인 :

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

미세한 컴파일을하고 넓은 문자열을 다른 넓은 문자열에 인쇄합니다. 그러나 이것은 실제로 다음과 같아야합니다.

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

'%s'를 '%ls'로 교체하지 않으면 다른 플랫폼에서는 작동하지 않습니다. Windows의 환경 테스트가 더 쉽고 빠르며 디버깅하기가 훨씬 간단합니다. 이러한 종류의 버그는 쉽게 눈에 띄지 않을 수 있습니다.

최선의 해결책은 처음에 올바른 코드를 작성하는 것이지만 압력으로 간단한 실수가 발생 하며이 특별한 경우에는 실수가 오랫동안 눈에 띄지 않을 수 있습니다.

나는 우리가 아직 즐기지 않는 이런 종류의 버그에 많은 변형이 있다고 생각합니다.

누구든지 이런 종류의 버그를 찾는 멋지고 깔끔한 방법이 있습니까?

: d

도움이 되었습니까?

해결책

기능 중 어느 것도 *printf 가족은 당신을 typesafe합니다

  • 정규 표현식을 통해 가능한 오류를 검색하고 수동으로 수정하십시오.
  • StringStreams 또는 boost.format

다른 팁

당신은보고 싶을 수도 있습니다 FastFormat Boost.format가 필요에 따라 너무 느립니다.

stringstreams 및 boost.format과 비교하여 :

  • ioStreams : fastformat.format은 모든 경우에 iOStreams보다 빠릅니다.
  • boost.format : fastformat.format은 모든 경우에 boost.format보다 빠릅니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top