通过变量和文本命名文件的C++语法

问题描述:

我有一个程序将文件名作为参数(例如:books.txt)运行,然后将结果输出到新的文本文件。我需要用附录命名输出文件(例如:books_output.txt)。通过变量和文本命名文件的C++语法

,我尝试的方法是

ofstream outputFile; 
outputFile.open(argv[1] + "_output.txt", ofstream::out); 

但这并没有进行编译。 我该如何做这项工作?

+0

S /'的argv [1]'/'的std :: string(的argv [1])' – user0042

+0

你的问题是“我怎么串联在C字符串++ “,谷歌为此,看看你打了什么 – pm100

+0

@ user0042 - 这要取决于他是在什么版本的C++,如果ofstream.open支持字符串文件名或不 – pm100

你的说法应该是这样的(在我的评论中提到):

outputFile.open(std::string(argv[1]) + "_output.txt", ofstream::out); 
      // ^^^^^^^^^^^^  ^

假定argv[1]来自标准main() si gnature

int main(int argc, char* argv[]) 

argv[1]char*指针,你不能连接char*指针的方式。

由于有些人对于过时的C++标准版本的支持感到困扰,早期版本的std::ofstream::open()签名不直接支持const std::string参数,而只支持const char*。如果你有这种情况你的语句应该看起来像

outputFile.open((std::string(argv[1]) + "_output.txt").c_str(), ofstream::out); 

你不能在2 C字符串之间加一个+。改为使用std :: string。做到这一点

ofstream outputFile; 
std::string fname = std::string(argv[1]) + "_output.txt"; 
outputFile.open(fname.c_str(), ofstream::out); 

最近的C++版本允许

outputFile.open(fname, ofstream::out); 

读取更好,但指同一件事

+2

当然'argv [1] +“_output.txt”'只是作为非法之外的函数?它不知道它正在初始化一个'字符串'并预先转换任何参数,可以吗? ('std :: string(argv [1])+“_output.txt”),或者使用C++ 14的'std :: string'文字('argv [1] +“ _output.txt“字符串文字上的尾注's')。或者做两步:'std :: string fname = argv [1]; fname + =“_output.txt”;' – ShadowRanger

+0

我正在使用c + + 11。 @ pm100和ShadowRanger你的两个解决方案都可以工作。谢谢您的帮助! –

+0

oops - 我的不好 - 我忘了把arv包装在std :: string中 – pm100