通过变量和文本命名文件的C++语法
我有一个程序将文件名作为参数(例如:books.txt)运行,然后将结果输出到新的文本文件。我需要用附录命名输出文件(例如:books_output.txt)。通过变量和文本命名文件的C++语法
,我尝试的方法是
ofstream outputFile;
outputFile.open(argv[1] + "_output.txt", ofstream::out);
但这并没有进行编译。 我该如何做这项工作?
你的说法应该是这样的(在我的评论中提到):
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);
读取更好,但指同一件事
当然'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
我正在使用c + + 11。 @ pm100和ShadowRanger你的两个解决方案都可以工作。谢谢您的帮助! –
oops - 我的不好 - 我忘了把arv包装在std :: string中 – pm100
S /'的argv [1]'/'的std :: string(的argv [1])' – user0042
你的问题是“我怎么串联在C字符串++ “,谷歌为此,看看你打了什么 – pm100
@ user0042 - 这要取决于他是在什么版本的C++,如果ofstream.open支持字符串文件名或不 – pm100