![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
![]()
Доброе время суток!
Считываю данные из файла: Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
![]() |
![]() |
![]() |
#2 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
![]()
В кодировке файла не верной причина быть может.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Меня смущает обилие макросов (_TCHAR, _tprintf, _TEXT) для переносимости кода между юникод/не юникод проектами. В свойствах проекта юникод включен? Файл юникодный или в какой-нибудь 1251 кодировке?
|
![]() |
![]() |
![]() |
#4 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
![]() Код:
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
![]()
Спасибо! Действительно все дело было в выводе.
Сейчас встала другая проблема ![]() Оказывается оператор new выделяет памяти больше, чем запрашивается (лишняя память, как я понял, необходима для хранения размера выделенной памяти, в которой нуждается оператор delete []). В связи с этим процесс выделения памяти для буфера определенного размера, записи в этот буфер такого же размера информации и последующий вывод буфера на печать приводит к выводу в конце лишних каракуль ![]()
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
![]() |
![]() |
![]() |
#6 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
![]()
=================================
предыдущая ошибка заключалась в следующем: _tprintf выводит строки unicode, тоесть wchar_t строки, а у вас в файле данные находились в обычной кодировке ansi ================================= Следующий ваш вопрос: под буфером я так понял вы подразумеваете строку. Выделите на один байт больше и в этот последний байт поместите NULL - ноль байт. Код:
Код:
Код:
Последний раз редактировалось lennon; 22.11.2009 в 13:12. |
![]() |
![]() |
![]() |
#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
Быть радикальным - значит понять вещь в её корне. К.Маркс
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Просто с мусором тебе так везёт. После выделения памяти, нужно обнулять данные, прежде, чем использовать их. К размеру выделяемого блока приведённый код вообще не имеет никакого отношения. Напиши так:
Код:
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
![]()
Ок. Задача стоит так. Из файла прочесть заданное количество байтов- bufLen. Я уже приводил код ранее, повторюсь:
Код:
Если бы задача ограничивалась выводом считанных байтов, то все было бы просто: Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 22.11.2009 в 14:45. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Файл текстовый или с бинарными данными? В bRead 40 записано и на экран 40 символов выводится?
|
![]() |
![]() |