尝试在C ++中打开文件时出错

时间:2016-09-26 09:37:54

标签: c++ file

我编写了一个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 ')'.

代码有什么问题吗?解决方案是什么?

3 个答案:

答案 0 :(得分:4)

只需查看您收到的错误消息。

fopen()需要const char*而不是std::string作为参数。要获得const char*字符串,请使用.c_str()函数。

fopen()虽然是c-api。作为替代方案,您还可以使用c ++的文件流。

std::fstream用于读/写,std::ifstream仅用于输入。 std::ofstream仅用于输出。

答案 1 :(得分:1)

  • 删除你的函数to_string以使用std库提供的函数并避免冲突。
  • 然后在需要时使用.c_str()将std :: string转换为char *。
  • 删除无用的内容

最终代码:

#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 };
    }
}