我正在编写一个程序来打开在命令行中给出的多个文件。我首先使用数组表示法。这似乎有效。现在我正在尝试使用紧凑的指针表示法练习并习惯指针,但我做得不对。有人想告诉我我做错了什么吗?感谢。
#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace std;
ifstream *OpenFiles(char * const fileNames[], size_t count)
{
ifstream *fileObj = new ifstream[count];
if (fileObj == NULL) {
cerr << "Failed to create space for files";
exit(EXIT_FAILURE);
}
// working loop with array notation
// for (int loopCount = 0; loopCount < (int) count; loopCount++) {
// fileObj[loopCount].open(fileNames[loopCount], ios::out);
// if (fileObj[loopCount].is_open()) {
// cout << "Opened " << fileNames[loopCount] << "\n";
// }
//
// }
// start compact pointer notation that doesn't work
ifstream *start, *end;
for (start = fileObj; start < end; start++) {
start.open(fileNames, ios::out);
if (start.is_open()) {
cout << "Opened " << start << "\n";
}
}
return fileObj;
}
答案 0 :(得分:1)
end
未初始化,因此start < end
是真还是假取决于堆栈上剩余的随机数据。你应该用:
end = fileObj + count;
答案 1 :(得分:0)
您必须取消引用指针,或使用箭头而不是点。此外,您必须选择要打开的文件名:
ifstream *end = fileObj + count;
for (ifstream *start = fileObj; start < end; start++) {
start->open(fileNames[start-fileObj], ios::out);
if (start->is_open()) {
cout << "Opened " << fileNames[start-fileObj] << "\n";
}
}
return fileObj;
在我看来,最好在这种情况下使用数组表示法。