Passing an array of an array of char to a function
- by L.A. Rabida
In my program, I may need to load a large file, but not always. So I have defined:
char** largefilecontents;
string fileName="large.txt";
When I need to load the file, the program calles this function:
bool isitok=LoadLargeFile(fileName,largefilecontents);
And the function is:
bool LoadLargeFile(string &filename, char ** &lines)
{
if (lines) delete [] lines;
ifstream largeFile;
#ifdef LINUX
largeFile.open(filename.c_str());
#endif
#ifdef WINDOWS
largeFile.open(filename.c_str(),ios::binary);
#endif
if (!largeFile.is_open()) return false;
lines=new char *[10000];
if (!lines) return false;
largeFile.clear();
largeFile.seekg(ios::beg);
for (int i=0; i>-1; i++)
{
string line="";
getline(largeFile,line);
if (largeFile.tellg()==-1) break; //when end of file is reached, tellg returns -1
lines[i]=new char[line.length()];
lines[i]=const_cast<char*>(line.c_str());
cout << lines[i] << endl; //debug output
}
return true;
}
When I view the debug output of this function, "cout << lines[i] << endl;", it is fine. But when I then check this in the main program like this, it is all messed up:
for (i=0; i<10000; i++)
cout << largefilecontents[i] << endl;
So within the function LoadLargeFile(), the results are fine, but without LoadLargeFile(), the results are all messed up. My guess is that the char ** &lines part of the function isn't right, but I do not know what this should be.
Could someone help me? Thank you in advance!