저는 C++로 일하고 있습니다.sprintf가 작성하는 문자 수를 결정할 방법이 있습니까?
sprintf를 사용하여 잠재적으로 매우 긴 형식의 문자열을 쓰고 싶습니다 (특히 _snprintf_s와 같은 안전한 계산 버전이지만 아이디어는 같습니다). 대략적인 길이는 컴파일 타임에 알려지지 않으므로 큰 정적 버퍼에 의존하기보다는 동적으로 할당 된 메모리를 사용해야 할 것입니다. 특정 sprintf 호출에 필요한 문자 수를 결정할 수있는 방법이 있습니까? 그래서 충분히 큰 버퍼를 가질 수 있습니까?
내 폴백은 포맷 문자열의 길이를 두 배로 늘린 다음 시도해 보는 것입니다. 제대로 작동한다면, 버퍼의 크기를 두 배로 늘린 다음 다시 시도해보십시오. 그것이 맞을 때까지 반복하십시오. 명확한 솔루션이 아닙니다.
길이를 얻기 위해 C99에서 snprintf에 NULL을 전달하는 것처럼 보입니다. 나는 그 기능을 감싸기위한 모듈을 만들 수 있다고 생각하지만, 그 아이디어에 미치지는 않습니다.
"/ dev/null"/ "nul"에 대한 fprintf가 대신 작동 할 수 있습니까? 다른 아이디어?
편집 : 다른 방법으로 "중간 크기 쓰기"를 선택하도록 sprintf를 "청크"할 수 있습니까? 가능한 경우 버퍼를 채우고 처리 한 다음 중단 한 부분부터 다시 채우기 시작합니다.
왜 이것이 downvoted인지 확실하지 않습니다 ... –
나는 그것을하지는 못했지만 어쩌면 그것이 끝난 이유를 볼 수 있습니다. snprintf()의 PD 버전이 있으므로 C99가 필요하지 않습니다. 아니면 질문에 특별히 stringstream보다는 printf() 솔루션을 요구했기 때문일 수도 있습니다. 나는 몰라, 오래 전 드라이브 다운 downvoters을 이해하려고 애를 썼다. – paxdiablo