我试图读取argv[1]
命名的文件,但我不知道我是怎么做的。感觉它很简单,我在编译时得到的错误信息是
main.cpp: In function ‘void* ReadFile(char**, int&)’:
main.cpp:43:22: error: request for member ‘c_str’ in ‘*(argv + 8u)’, which is of non-class type ‘char*’
make: *** [main.o] Error 1
这是我的代码:
#include "movies.h"
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void *ReadFile(char*[], int&);
int size;
int main(int argc, char *argv[])
{
char * title[100];
cout << argv[1] << endl;
//strcpy(argv[1],title[100]);
//cout << title << endl;
ReadFile(argv , size);
return 0;
}
void *ReadFile(char * argv[] , int& size)
{
char data;
//char title[50];
//strcpy(title,argv[1]);
//cout << title << endl;
ifstream fin;
fin.open(argv[1].c_str()); //filename
if (fin.good())
{
fin >> data;
cout << data << " ";
while (!fin.eof( ))
{
fin >> data;
cout << data << " ";
}
}
}
答案 0 :(得分:5)
如错误所示,您尝试在非类类型上调用成员函数c_str()
。 argv[1]
是指向字符数组(C样式字符串)的指针,而不是类对象。
只需将指针传递给open()
:
fin.open(argv[1]);
你可以在c_str()
对象上调用std::string
,如果你有其中一个,但需要一个C风格的字符串。 (从历史上看,如果你有fin.open()
,你必须这样做才能调用std::string
;但是从C ++ 11开始,你可以直接传递该类型。
答案 1 :(得分:3)
.c_str()
函数是为string
个对象定义的,用于将其转换为char *
。您正试图在char *
上使用它。相反,请使用fin.open(argv[1])
,因为它已经是C字符串。