[英]Trying to create an output file with freopen, using non-constant string
我正在尝试创建一个名称为字符串常量,但由常量字符串“ List”组成的字符串,该字符串为整数+扩展名。 这是我的代码:
#include <iostream>
#include <vector>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main (){
int cont=0;
std::string result;
std::string name = "Lista";
std::string ext = ".txt";
char numstr[21]; // enough to hold all numbers up to 64-bits
sprintf(numstr, "%d", cont);
result = name + numstr+ext;
freopen (result, "w", stdout);
cout<<result<<endl;
return 0;
}
当我尝试构建时会告诉我以下错误:
错误:无法将参数
1' to
std::string' to
转换std::string' to
const char *'1' to
FILE * freopen(const char *,const char *,FILE *)'|
我该如何解决?
由于编译器错误指出,没有从std::string
到char const*
隐式转换(即,在这种情况下为c样式字符串 )。
尽管std::string
有一个名为c_str
的成员函数 ,它将生成一个以空值结尾的字符串,并返回一个指向它的指针,这在处理旧版C函数时非常有用。
freopen (result.c_str (), "w", stdout);
char const * p = result.c_str ();
请注意,如果您对托管对象进行任何修改(在本例中为result
),则std::string::c_str
指向的c-style-string将无效,因此,通常不明智的做法是将返回的值存储在非临时变量。
如果您点击以下链接,则可以阅读有关该功能的更多信息 :
我有一个完全可以做到这一点的小应用程序 。 有几种方法可以做到这一点。其中最简单的方法是
const char * newvar = stringname.c_str();
如果要使用sprintf
,则可能最容易跳过使用std::string
的操作:
char name[32];
sprintf(name, "lista%d.txt", cont);
freopen(name, "w", stdout);
如果要使用std::string
(无论如何,对于大多数C ++来说可能更可取),则可能要使用std::stringstream
创建名称:
std::ostringstream name;
name << "lista" << cont << ".txt";
freopen(name.str().c_str(), "w", stdout);
但是,我通常倾向于避免使用freopen
, 并避免在C ++中使用C样式的流(例如stout)。 通常最好写一个ostream
。 上一个问题的答案显示了如果确实需要,如何将cout
连接到另一个输出文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.