2013-09-24 1 views
1

번호가 매겨진 인덱스로 이미지 파일을 저장해야합니다. stringstream을 사용하여이 파일 이름을 생성하려고합니다. 그러나 stringstream.str()은 파일 이름을 반환하지 않지만 오히려 일부 가비지를 반환합니다.std :: stringstream.str() 가비지를 출력합니다.

Wrote ░‗V 
Wrote ░‗V 
Wrote ░‗V 
Wrote ░‗V 

어떤 제안 :

여기
Wrote ╠±0 
Wrote ╠±0 
Wrote ╠±0 
Wrote ╠±0 

다른 실행의 출력이다

여기
std::stringstream filename; 
filename << filepath << fileindex << ".png"; 
bool ret = imwrite(filename.str(),frame, compression_params); 
fileindex++; 
printf("Wrote %s\n", filename.str()); 

하나 개의 실행으로부터 출력된다 : 여기

코드인가? imwrite는 opencv 함수이며, 파일 상단의 네임 스페이스 cv; [/ code]를 사용하여 [코드]를 가지고 있습니다 - opencv와 std 사이에 간섭이 있습니까?

답변

3

과 같은 C 스타일 가변 함수에 std::string과 같은 비 POD 유형을 전달할 수 없습니다. 당신은 구식 불확실성을 좋아하는 경우에, C 스타일의 출력에 대한 C 스타일의 문자열을 추출,

std::cout << "Wrote " << filename.str() << '\n'; 

나 :

당신은 C++ 출력을 사용할 수

printf("Write %s\n", filename.str().c_str()); 
+0

네를, 나는 그것을 느낀다 옛날 학교 괴괴 망련없는 더 나은 - 가능한 한 printf는 생략합니다. 폴더가 없기 때문에 imwrite가 작동하지 않는 것으로 나타났습니다. – escapecharacter

4

filename.str()std::string 개체를 반환합니다. 직접 printf 할 수 없습니다. 형식 %s에는 C 스타일 문자열이 필요합니다. 그래야만 작동합니다.

printf("Wrote %s\n", filename.str().c_str()); 

어떤 경우에도 C++ 개체에 C 스타일 함수를 사용하는 것이 항상 최선의 방법은 아닙니다.

관련 문제