|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.11.2009, 01:11 | #1 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
ReadFile
Доброе время суток!
Считываю данные из файла: Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
21.11.2009, 10:17 | #2 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
В кодировке файла не верной причина быть может.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
21.11.2009, 21:54 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Меня смущает обилие макросов (_TCHAR, _tprintf, _TEXT) для переносимости кода между юникод/не юникод проектами. В свойствах проекта юникод включен? Файл юникодный или в какой-нибудь 1251 кодировке?
|
22.11.2009, 01:27 | #4 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
Код:
|
22.11.2009, 11:22 | #5 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
Спасибо! Действительно все дело было в выводе.
Сейчас встала другая проблема Оказывается оператор new выделяет памяти больше, чем запрашивается (лишняя память, как я понял, необходима для хранения размера выделенной памяти, в которой нуждается оператор delete []). В связи с этим процесс выделения памяти для буфера определенного размера, записи в этот буфер такого же размера информации и последующий вывод буфера на печать приводит к выводу в конце лишних каракуль
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
22.11.2009, 13:04 | #6 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
=================================
предыдущая ошибка заключалась в следующем: _tprintf выводит строки unicode, тоесть wchar_t строки, а у вас в файле данные находились в обычной кодировке ansi ================================= Следующий ваш вопрос: под буфером я так понял вы подразумеваете строку. Выделите на один байт больше и в этот последний байт поместите NULL - ноль байт. Код:
Код:
Код:
Последний раз редактировалось lennon; 22.11.2009 в 13:12. |
22.11.2009, 13:46 | #7 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
Проблема в следующем. Я использую оператор new:
Код:
Если а = 1,2,3,4, то i принимает значение 16. Если а = (5-12), то i принимает значение 24. Если а = (13-20), то i принимает значение 32. Если а = (21-28), то i принимает значение 40. и т.д. Т.е. размер буфера всегда на 12 больше фактически запрашиваемого размера памяти. VS2008
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
22.11.2009, 13:59 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Просто с мусором тебе так везёт. После выделения памяти, нужно обнулять данные, прежде, чем использовать их. К размеру выделяемого блока приведённый код вообще не имеет никакого отношения. Напиши так:
Код:
|
22.11.2009, 14:33 | #9 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
Ок. Задача стоит так. Из файла прочесть заданное количество байтов- bufLen. Я уже приводил код ранее, повторюсь:
Код:
Если бы задача ограничивалась выводом считанных байтов, то все было бы просто: Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 22.11.2009 в 14:45. |
22.11.2009, 14:39 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Файл текстовый или с бинарными данными? В bRead 40 записано и на экран 40 символов выводится?
|