【发布时间】:2015-12-29 08:40:23
【问题描述】:
我是一个新手,正在编写一个 c++ 代码来打开和读取多个文件,然后将部分数据转储到其他文件中。 我想在 for 循环中生成文件名。 但我无法连接字符串(文件编号)和字符串文字(文件扩展名)。同一行代码在程序的最开始起作用,但在后面部分不起作用。
int main(int argc, char *argv[])
{
std::cout << std::string("9") + ".dat" << std::endl;
// many more lines
dump = 1;
if (dump == 1){
for (int ilevel=std::max(levelmin,lmin); ilevel < lmax + 1; ilevel++){
std::cout << std::string("9") + ".dat" << std::endl; // crashes here!
std::ofstream fout (std::string("9") + ".dat", std::ios::out | std::ios::binary);
std::cout << grid[ilevel].cube[0] << std::endl;
fout.write ((char*)&grid[ilevel].cube[0], grid[ilevel].cube.size() * sizeof(grid[ilevel].cube[0]));
fout.close();
}
}
...
}
如果我将std::cout << std::string("9") + ".dat" << std::endl; 放在开头,它会起作用并打印“9.dat”。
但在后面的循环中,分段错误。
在两者之间,我调用了一个函数,该函数使用 stringstream 将前导零填充到整数。函数看起来:
std::string int2str(const int n, const int m){
std::stringstream ss;
ss << std::setfill('0') << std::setw(m) << n;
std::string s2(ss.str());
ss.clear();
return s2;
}
我对c++中的string和stringstream不是很清楚。 但是在我的程序中的许多东西中,这个功能是我唯一能想到的相关的东西。代码的其他部分不处理字符串。它主要是数组操作代码。
我也试过std::string("9") + std::string(".dat")
但没有运气。
怎么了?
【问题讨论】:
-
对即将超出范围并运行其析构函数的变量调用
ss.clear()毫无意义。同样对于f.close(),它无论如何都要运行它的析构函数。析构函数关闭文件。
标签: c++ string c++11 string-concatenation stringstream