前置文件名

时间:2015-10-03 16:55:43

标签: c++ arrays pointers

我试图在动态创建的文件名中添加一些内容:

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*’

4 个答案:

答案 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