我想在(ofstream)文件路径
中将变量与字符串值组合在一起示例:
long phNumber;
char bufPhNumber[20];
ofstream ifile;
cout << "Phone Number: ";
cin >> phNumber;
itoa(phNumber,bufPhNumber,20);
ifile.open("c://" + bufPhNumber + ".txt",ios::out); // error in this line
如何将此变量(bufPhNumber)与该字符串组合(“c://”+此处变量+“。txt”)
答案 0 :(得分:4)
这样做:
ifile.open((std::string("c://") + bufPhNumber + ".txt").c_str(),ios::out);
说明:
它首先创建一个字符串,并使用operator+()
将其余的c字符串连接为:
std::string temp = std::string("c://") + bufPhNumber + ".txt";
然后将c_str()
传递给.open()
:
ifile.open(temp.c_str(),ios::out);
但是,在C ++ 11中,您不需要执行.c_str()
,并且可以直接使用std::string
。
更好的解决方案应该是:
std::string phNumber; //declare it as std::string
cout << "Phone Number: ";
cin >> phNumber; //read as string
//use constructor
ofstream ifile(("c://" + phNumber + ".txt").c_str(), ios::out);
答案 1 :(得分:1)
ofstream::open
,至少在C ++ 11 (a)之前,需要const char *
作为文件名,而不是std::string
,按{ {3}}
而不是:
ifile.open("c://" + bufPhNumber + ".txt",ios::out);
使用以下内容:
string fspec = std::string ("c://") + bufPhNumber + ".txt";
ifile.open (fspec.c_str(), ios::out);
(您可能想要考虑为什么输出文件被称为ifile
)。
(a)在C ++ 11中,open
有两个 basic_ofstream
函数:
void open(const char* s, ios_base::openmode mode = ios_base::out);
void open(const string& s, ios_base::openmode mode = ios_base::out);
所以string
版本可以在那里工作。
答案 2 :(得分:-1)
好的,嗨。你不能像java一样直接连接字符串,所以你的问题就在这里:
bufPhNumber +“。txt”
鉴于bufPhNumber是char *而text是char *,它们不支持你想要的+运算符。
这样的作业有strcat(),但它假定目标字符串有足够的空间容纳目标字符串,并且它还修改了目标字符串。
char Array[28]; //One for the null
strcat(Array,"C:\\");
strcat(Array,bufPhNumber);
strcat(Array,".txt");
虽然我建议使用char数组作为电话号码,因为它不太适合这样的存储,因为它不能容纳任意数量的数字(你可以考虑使用两个整数/长)。另外,请考虑使用unsigned long(因为您没有获得负数电话号码)。如果使用long / int,请注意从long转换为char数组,将char数组转换为long将占用大量内存和处理能力,这比使用char数组效率更低。