我正在尝试创建一个文件,其名称是一个字符串常量,但是一个由常量字符串“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;
}
当我尝试构建时,出现以下错误:
error: cannot convert
std::string' to
const char*' for argument1' to
FILE* freopen(const char*, const char*, FILE*)'|
我该如何解决这个问题?
最佳答案
由于编译器错误说明没有从 std::string
到 char const*
的隐式转换(即 c-style-string 在这种情况下)。
尽管 std::string
有一个名为 c_str
的成员函数这将生成一个 null-terminated 字符串并返回一个指向它的指针,这在处理遗留 C 函数时非常有用。
例子和注释
freopen (result.c_str (), "w", stdout);
char const * p = result.c_str ();
请注意,如果您对托管进行任何修改,std::string::c_str
指向的 c-style-string 将失效对象(在本例中为 result
),因此将返回的值存储在非临时变量中通常是不明智的。
如果您点击以下链接,您可以阅读有关该功能的更多信息:
关于c++ - 尝试使用非常量字符串通过 freopen 创建输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463674/