4

很抱歉这个菜鸟问题,但我似乎无法让它工作,任何帮助将不胜感激。

const int sz = 24;


int main()
{
char a [sz];

for (int i = 0; i < 5; i++)
    cin >> a[i];

ifstream inFile;

inFile.open(a);

cout << inFile.good() << endl;


return 0;
}

这是我正在尝试做的一个较小的版本,即使用 .open() 打开 inFile 流,对于我试图传递的文件名,它是一个 char 数组。我在正确的目录中有一个名为 a.txt 的文件(我已经确认了这一点),所以我输入了 a.txt,它被读入了 a 数组,但 inFile.good() 仍然返回 false。我也知道数组大于 5 个字符,但我认为这不会影响它。

如果需要更多信息,请告诉我。

4

1 回答 1

2

的签名open是:

void open ( const char * filename, ios_base:openmode mode = ios_base::in );

正如所见,第一个参数是一个常量字符串(以 nul 结尾的字符数组)。在您的情况下,最后没有 nul 字符。为此,您需要一个大小比您将输入的最大文件名大小大一的数组。

为什么不只用一个来读字符cin呢?作为:

cin >> a;
ifstream inFile;
inFile.open(a);

或者甚至更好地使用String类来获取用户输入,然后使用c_str()来获取const char*可以传递给open.

于 2012-04-26T05:59:24.683 回答