Вы, похоже, «измеряете» длину файла, многократно читая отдельные символы из него.Вам не нужно этого делать - просто определите размер перед открытием файла:
#include <filesystem>
#include <fstream>
int main() {
auto file_name { "text.txt" };
auto size = std::filesystem::file_size(file_name);
std::ifstream file(file_name);
// etc. etc.
См. Документацию для функции file_size()
.Это в C ++ 17;если вы используете более раннюю версию языка, попробуйте >experimental/filesystem>
с C ++ 14, или иначе библиотеку boost::filesystem
с любой версией C ++.
...но на самом деле вам вообще не нужно это делать !
Вы можете просто прочитать весь файл, используя обычные стандартные библиотеки C ++:
#include <sstream>
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("text.txt");
if (not file) { /* handle error */ }
std::stringstream sstr;
sstr << file.rdbuf(); // magically read all of the file!
auto entire_file_contents = sstr.str();
const char* arr = entire_file_contents.c_str();
// Now do whatever you like with the char array arr
}
См. Также: Как лучше всего прочитать весь файл в std :: string в C ++?
Кстати, определить размер файла довольно сложно.с std::ifstream
без сортировки всего файла, см. этот ответ .