我正在尝试显示来自不同位置的图像。需要显示汽车,飞机,椅子等文件。我把那些话(汽车,飞机)放在一个文本文件中。我可以阅读单词但是当我把它们放在sprintf中时,我会得到无意义的字符。
我可以用cout<<*j<<endl;
显示单词。但是cout<<filename<<endl;
给了我奇怪的结果。
string words;
std::vector<string>list;
fstream file;
file.open("h.txt");
while(!file.eof())
{
file >> words;
list.push_back(words);
}
for(vector<string>::iterator j=list.begin(); j!=list.end(); j++)
{
cout<<*j<<endl;
for(i=1; i<5; i++)
{
sprintf( filename,"D:\\101_ObjectCategories\\%s\\image_%04d.jpg",*j,i);
cout<<filename<<endl;
答案 0 :(得分:2)
C函数sprintf()
忽略了C ++类。如果您真的想使用std::string
打印sprintf()
,则需要提取C字符串:
sprintf(filename, "D:\\101_ObjectCategories\\%s\\image_%04d.jpg", j->c_str(), i);
您还应该将snprintf()
与您传递的缓冲区大小filename
一起使用,以防止溢出。就个人而言,我不会真的很烦,而是首先使用std::ostringstream
:
std::ostringstream out;
out << "D:\\101_ObjectCategories\\" << *j << "\\image_"
<< std::setfill('0') << std::setw(4) << i << ".jpg";
std::string filename = out.str();
(包括<sstream>
和<iomanip>
后)。
答案 1 :(得分:1)
使用必须使用* j.c_str():
sprintf( filename,"D:\\101_ObjectCategories\\%s\\image_%04d.jpg",*j.c_str(),i);
否则,字符串类本身会被显式转换为char *,这当然是垃圾:)