我编写了一个C ++代码来在循环中创建一些文件名。例如,我将运行循环八次并创建8个文本文件,如:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<stdlib.h>
#include<fstream>
#include <sstream>
using namespace std;
std::string to_string(int i) {
std::stringstream s;
s << i;
return s.str();
}
int main()
{
FILE *fp;
int i=0;
string fileName;
string name1 = "input";
string name2 = ".txt";
while(i<=7)
{
fileName = name1+ to_string(i)+ name2;
cout<<fileName<<"\n";
fp=fopen(fileName,"r");
i++;
}
}
我的示例代码如下:
error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'FILE* fopen(const char*, const char*)'
但是,当我运行代码时,我收到以下错误:
Incorrect syntax near ')'.
代码有什么问题吗?解决方案是什么?
答案 0 :(得分:4)
只需查看您收到的错误消息。
fopen()
需要const char*
而不是std::string
作为参数。要获得const char*
字符串,请使用.c_str()
函数。
fopen()虽然是c-api。作为替代方案,您还可以使用c ++的文件流。
std::fstream
用于读/写,std::ifstream
仅用于输入。 std::ofstream
仅用于输出。
答案 1 :(得分:1)
最终代码:
#include<iostream>
using namespace std;
int main()
{
FILE *fp;
int i=0;
string fileName;
string name1 = "input";
string name2 = ".txt";
while(i <= 7)
{
fileName = name1 + to_string(i).c_str() + name2;
cout << fileName << "\n";
fp=fopen(fileName.c_str(),"r");
i++;
}
}
答案 2 :(得分:0)
只需使用std::ofstream
而不是混合使用C和C ++。
int main()
{
string file_name{ "input" };
string extention{ ".txt" };
for (int i{}; i != 8; ++i) {
string temp_file_name{ file_name + to_string(i) + extention };
ofstream file{ temp_file_name };
}
}