Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как в C++ считать из файла.txt все строки и символы в массив char? Размерность файла заранее неизвестна.

Papa Sigma Ученик (176), открыт 1 неделю назад
В файле расположено что-то вроде: "sdknfksldfsldk sflksdjfklhskl safnlkfsnfsd"
Мой примерный код:
Я пробую через eof посчитать длину файла, с которого считываю. Записываю количество символов в переменную count.
Создаю массив char с размерностью count.
Пытаюсь из строки записать данные в массив при помощи цикла while.
Но в итоге выходит полная краказябра. Метод seekg использовать нельзя. Как быть?


std::ifstream fin;
fin.open ("file.txt");
int count = 0;
while (!fin.eof()) {
char ch;
fin >> ch;
count++;

}
cout << count;


char* fromFile = new char[count];

int i = 0;


while (i<count) {
char ch;
fin >> ch;
fromFile[i] = ch;
i++;
}

for (int i = 0; i < count; i++) {
cout << fromFile[i];
}


fin.close();
delete[] fromFile;

}
2 ответа
Алексей Пупок Мастер (1037) 1 неделю назад
 #include  
#include

int main() {
std::ifstream file("example.txt"); // open the file

if (!file) { // check if the file was opened successfully
std::cout << "Unable to open file";
return 1;
}

file.seekg(0, std::ios::end); // move to the end of the file
int fileSize = file.tellg(); // get the file size
file.seekg(0, std::ios::beg); // move back to the beginning of the file

char* charArray = new char[fileSize + 1]; // allocate memory for the char array

file.read(charArray, fileSize); // read the entire file into the char array
charArray[fileSize] = '\0'; // null-terminate the char array

// do something with the char array
std::cout << charArray << std::endl;

delete[] charArray; // deallocate memory
file.close(); // close the file

return 0;
}
Алексей ПупокМастер (1037) 1 неделю назад
попробуй так
Руслан Редков Гуру (3780) 1 неделю назад
Чтобы считать из файла все строки и символы в массив char в C++, можно использовать метод getline().

Пример кода:

#include
#include
using namespace std;

int main() {

const int len = 30, strings = 5;
const char ch = ‘\n’;
char mass[len][strings];

ifstream fs(“strings.txt”, ios::in | ios::binary);
if(!fs) return 1; // Если ошибка открытия файла, то завершаем программу

for(int r = 0; r<strings; r++) {
fs.getline(mass[r], len-1, ch); // Считываем строки в массив
cout << “String “ << r+1 << “ = “<< mass[r] << endl; // Выводим строку из массива
}
fs.close(); // Закрываем файл
return 0;
}

Функция getline() считывает символы из файла, пока не достигнет максимальной длины строки или не встретит на своём пути символ-разделитель, а после записывает считанные символы в массив.

Важно помнить, что при работе с файлами необходимо обрабатывать ошибки и учитывать возможные риски.
Похожие вопросы