Why does this fail, it’s supposed to be simple and work ?
fisier.seekg(0, ios::end);
long lungime = fisier.tellg();
This returns a larger value than that of the file resulting in a wrong
char *continut = new char[lungime];
Any idea what the problem could be ?
I also tried counting to the end of the file one char at a time, that rendered the same result, a higher number than expected. But upon using getline() to read one line at a time, it works, there are no extra spaces…
At a guess, you’re opening the file in translated mode, probably under Windows. When you simply seek to the end of the file, the current position doesn’t take the line-end translations into account. The end of a line (in the external file) is marked with the pair “\r\n” — but when you read it in, that’s converted to just a “\n”. When you use
getlineto read one line at a time, the\ns all get discarded as well, so even on a system (e.g. Unix/Linux) that does no translation from external to internal representation, you can still expect those to give different sizes.Then again, you should really forget that
new []exists at all. If you want to read an entire file into a string, try something like this:continut.str()is then anstd::stringcontaining the data from the file.