我试图在动态创建的文件名中添加一些内容:
fstream a;
string f = argv[1];
string fw = f.substr(0, f.rfind("."));
const char* pre = 'my_';
a.open(pre + fw.c_str(), fstream::out | fstream::in | fstream::trunc);
a.close();
a.open(pre + fw.c_str(), fstream::out | fstream::in | fstream::trunc);
但显然我不能使用+
运算符来加入它。
错误:
invalid operands of types ‘const char*’ and ‘const char*’ to binary ‘operator +
也是我得到的my_
声明
invalid conversion from ‘int’ to ‘const char*’
答案 0 :(得分:2)
请尝试以下操作。
const std::string pre="my_";
a.open((pre + fw).c_str(), fstream::out | fstream::in | fstream::trunc);
根据您的编译器及其版本,您甚至可以使用以下代码(不需要.c_str()
部分)。
a.open(pre + fw, fstream::out | fstream::in | fstream::trunc);
答案 1 :(得分:2)
您知道std::string
,现在为什么要使用const char*
?即使是初始化也是错误的:
const char *pre = 'my_'; // must be double-quoted
然后,如果你想连接两个const char*
,而不是一起添加指针,你需要使用std::strcat
:
char fname[100] = "my_"; // You decide the length of the buffer, it would be MAX_PATH on Windows
a.open(std::strcat(fname, fw.c_str()), fstream::out | fstream::in | fstream::trunc);
您还可以在operator+
和std::string
上使用const char*
,这更加简单:
const char *pre = "my_";
a.open(pre + fw, fstream::out | fstream::in | fstream::trunc);
但这不是你应该怎么做的。仅使用std::string
:
fstream a;
string f = argv[1];
string fw = f.substr(0, f.rfind("."));
std::string pre = "my_";
a.open(pre + fw, fstream::out | fstream::in | fstream::trunc);
a.close();
a.open(pre + fw, fstream::out | fstream::in | fstream::trunc);
答案 2 :(得分:1)
更改此
pre + fw.c_str()
到
(string(pre) + fw).c_str()
或者更好地继续使用C ++字符串:
string(pre) + fw
另请注意,您错误地定义了常量C样式字符串:
const char *pre='my_';
它应该是:
const char *pre="my_";
答案 3 :(得分:0)
也可以string
使用pre
,例如:
string pre = "my_";
// then pre + fw