> ymjoke.c_str(); Sh" /> > ymjoke.c_str(); Sh" /> > ymjoke.c_str(); Sh"/>

Ifstream returns empty string

46 views Asked by At

The file is not empty, but ifstream returns an empty string.

Here is what I have tried:

std::ifstream ifs;
ifs.open("joke");
ifs >> ymjoke.c_str();
ShowMessage(ymjoke);

Here is a screenshot of the ShowMessage() window:

image

1

There are 1 answers

0
Remy Lebeau On BEST ANSWER

I'm assuming that ymjoke is declared as an AnsiString, yes? Why are you reading into its c_str() pointer? Did you pre-allocate ymjoke's memory beforehand? I'm betting you did not. You are using the overloaded operator>> that reads into a char[] buffer, so it expects that buffer to be large enough to hold the text being read into it, eg:

AnsiString ymjoke;
ymjoke.SetLength(256); // or whatever size suits your need
std::ifstream ifs("joke");
ifs >> std::setw(ymjoke.Length()+1) >> ymjoke.c_str();
ShowMessage(ymjoke.c_str());

That said, the VCL has an overloaded operator>> for reading an AnsiString from a std::istream. You just need to enable it manually, by adding VCL_IOSTREAM to the Conditionals list in your project options. Then, you can use it like this:

AnsiString ymjoke;
std::ifstream ifs("joke");
ifs >> ymjoke;
ShowMessage(ymjoke);

Otherwise, read into a std::string instead, eg:

std::string ymjoke;
std::ifstream ifs("joke");
ifs >> ymjoke;
ShowMessage(ymjoke.c_str());