使用字符数组作为文件名

Using a character array as a file name?

本文关键字:文件名 数组 字符      更新时间:2023-10-16

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

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 流,对于我尝试传递的文件名,它是一个字符数组。 我在正确的目录中有一个名为 a.txt 的文件(我已经确认了这一点),所以我输入 a.txt,它被读取到 a 数组中,但 inFile.good() 仍然返回 false。 我也知道数组大于 5 个字符,但我认为这不会影响它。

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

open的签名是:

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

如前所述,第一个参数是一个常量字符串(NUL 终止字符数组)。在您的情况下,末尾没有 NUL 字符。为此,您需要一个比您将输入的最大文件名大小大 1 的数组。

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

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

或者更好的是使用 String 类来获取用户输入,然后使用 c_str() 获取可以传递给 openconst char*等效项。