2013-09-24 68 views
1

我需要保存一堆帶有編號索引的圖像文件。我正在嘗試使用stringstream構造這些文件名。然而,stringstream.str()似乎沒有返回文件名,而是返回一些垃圾。std :: stringstream.str()輸出垃圾

下面是代碼:

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

下面是從一個執行的輸出:

Wrote ╠±0 
Wrote ╠±0 
Wrote ╠±0 
Wrote ╠±0 

下面是從另一執行的輸出:

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

任何建議? imwrite是一個opencv函數,我在代碼中使用了命名空間cv; [/ code] - opencv和std之間是否存在一些干擾?

回答

3

您不能將諸如std::string之類的非POD類型傳遞給像C12樣式的可變參數函數,如printf

你可以使用C++輸出:

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

,或者,如果你喜歡老派的怪事,提取C風格輸出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++對象並不總是最好的主意。