4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
||||||
1 | ||||||
Чтение файла в строку char *22.11.2017, 03:02. Показов 6725. Ответов 12
Метки нет (Все метки)
Задача состоит в том, чтобы считать последние 65536 байт файла в char *(без символа конца файла), и все вроде бы работает, но когда я вывожу в консоль считанные данные, то в конце лишние рандомные символы всегда. В чем я ошибся? Как их убрать?
0
|
22.11.2017, 03:02 | |
Ответы с готовыми решениями:
12
Чтение из файла в массив char Чтение из файла и запись в массив char Чтение текстового файла в вектор типа char Чтение бинарного файла функцией std::ifstream::read(char*, streamsize) |
4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
|
22.11.2017, 03:44 [ТС] | 3 |
тем не менее, в конце лишние символы при выводе, которых нету в файле.
0
|
4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
|
22.11.2017, 03:58 [ТС] | 5 |
Вопрос не в нуле, а в том, как исправить то, что при чтении файла, в котором записано только "123456" выводится "123456⌂╚╚☺"(или что-то подобное, символы каждый раз случайные)
0
|
4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
|
22.11.2017, 05:07 [ТС] | 7 |
Не по теме: На C++ у меня нет никакого опыта и 0 написанных программ(исключая Hello worl'ы различные). До этого я писал на C#, в котором таких проблем отродясь не было, язык простой, понятный и без заморочек.
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
22.11.2017, 05:25 | 8 |
Сообщение было отмечено allCrowley как решение
Решение
Выдели память на один байт больше, чем размер данных в файле. После чтения файла, помести по индексу, равному размеру данных в файле, символ '\0' (признак конца Си-строки).
1
|
4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
|||||||||||||||||||||
22.11.2017, 20:09 [ТС] | 9 | ||||||||||||||||||||
Как это можно сделать, применительно к моему методу? Я видимо не догоняю.
Сделал вот так:
Предполагалось что-то в этом роде: допустим, файл весит 10 байт. В таком случае функция
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
||||||
22.11.2017, 20:29 | 11 | |||||
Скобки поставь, чтобы не указатель увеличивался, а размер выделяемой памяти.
Размер памяти один выделяешь, а читаешь другой размер данных? strlen() требуется '\0' в конце Си-строки, чтобы определить количество символов в строке. Добавлено через 11 минут Вот тебе пример, дальше сам разбирайся:
1
|
4 / 4 / 4
Регистрация: 29.11.2014
Сообщений: 131
|
||||||
22.11.2017, 23:02 [ТС] | 12 | |||||
Разобрался, спасибо
В итоге метод выглядит как-то так(на случай, если этот вопрос загуглит такой же дурачок как я в будущем):
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
||||||
22.11.2017, 23:42 | 13 | |||||
Опять не так, опять к указателю единицу прибавляешь. При освобождении памяти ошибка будет.
1
|
22.11.2017, 23:42 | |
22.11.2017, 23:42 | |
Помогаю со студенческими работами здесь
13
Как считать строку из файла в char? Запись символов из файла в единичный char и строку Чтение из файла в строку Считать с файла строку типа char до знака окончания строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |