为什么这会失败,它应该是简单而有效的?
fisier.seekg(0, ios::end);
long lungime = fisier.tellg();
Run Code Online (Sandbox Code Playgroud)
这将返回一个比文件更大的值,从而导致错误
char *continut = new char[lungime];
Run Code Online (Sandbox Code Playgroud)
知道问题可能是什么?
我也尝试一次计数到文件的末尾一个char,它产生相同的结果,比预期的数字更高.但是一旦使用getline()一次读取一行,它就可以工作,没有多余的空格......
猜测,你是在翻译模式下打开文件,可能是在Windows下.当您只是寻找文件的末尾时,当前位置不会考虑行端转换.一行(在外部文件中)的末尾标有"\ r \n"对 - 但是当你读入它时,它只被转换为"\n".当您getline一次读取一行时,\ns也会被丢弃,因此即使在不从外部到内部表示转换的系统(例如Unix/Linux)上,您仍然可以期望它们具有不同的大小.
然后,你应该真的忘记new []存在.如果要将整个文件读入字符串,请尝试以下操作:
std::stringstream continut;
continut << fisier.rdbuf();
Run Code Online (Sandbox Code Playgroud)
continut.str()然后是std::string包含文件中的数据.