![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Пытаюсь заполнить структуру:
Код:
Код:
Цитата:
Но происходит следующее. В первую переменную нулевые байты считываются нормально. При считывании второго числа, 0D пропускается и считывается число 00 00 00 D0 = 3489660928 dec. Перебрал несколько функций _getw, read, fread, fgetc, fscanf, fgets FileRead. Везде одна и та-же хрень. Может кто сталкивался с подобным эффектом и как его обойти? Обнаружил ещё одну странность. Вставляю в код проверку Код:
474, 478, 482... но вот читает число со сдвигом на один байт ![]() ![]() ![]() Если в коде встречается 0A, число считывается верно, а вот к итерации прибавляется единица. 472, 476, 481 ![]() ![]()
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 21.01.2012 в 13:59. |
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
0D - 13 код, он же enter, конец ввода. Управляющая Esc последовательность.
Может быть можно как то пофиксить факт "не_читаемого байта", путём контроля позиции каретки в файле при каждом последующем чтении? Если имело место смещение на 1 байт вправо, стало быть, был пропущен Enter, и считывать не 4 байта, а только 3. А первый байт ручками восстанавливать, зная что он должен быть OD ? Я то сам приплюснутыми средствами пользуюсь. Почему то я ни разу ни на что подобное не напарывался... |
![]() |
![]() |
![]() |
#3 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Что за смесь не понятная из С, С++, и билдера? Нахватали кусков из разных технологий и удивляетесь почему не работает.
Если хотите писать на C++ используйте потоки для ввода/вывода. Если на C - уберите std::string. Если из вашей структуры убрать член string strin, заменив его на char[], она станет POD-типом, и сможете записывать и читать ее одни куском. В бинарном режиме не должны преобразовываться esc-последовательности. Просто ТС открыл файл не в бинарном режиме
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Последний раз редактировалось Blade; 21.01.2012 в 13:59. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]() Цитата:
Эта странная смесь, результат мозголомства. Никогда не приходилось работать с чисто бинарными файлами. Пишу в Билдере на C++. std::string у меня явно не объявлен.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
![]() |
![]() |
![]() |
#6 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Открывайте файл в бинарном режиме
Код:
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Спасибо Blade. Надо-же. На такой фигне поймался
![]()
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Странное поведение gets | alex_alpha | Общие вопросы C/C++ | 3 | 27.03.2010 18:21 |
Странное поведение процедуры | Sergey1974 | Общие вопросы Delphi | 2 | 11.12.2009 21:41 |
Странное поведение базы | yulia | БД в Delphi | 7 | 22.04.2009 07:15 |
Странное поведение ПОИСКПОЗ | ZORRO2005 | Microsoft Office Excel | 5 | 19.05.2008 14:02 |