![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| tenebris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Привет!!! Значит дело такое. Есть большая структура порядка 20 записей.
Все записи разного размера, т.е. надо считывать из файла определенное количество байт. Может здесь ошибка, но я использую тип char. Нужно считать в структуру файл. И вот здесь получается вот что. Допустим у меня есть последняя запись. Я её вывожу -всё нормально. Но как только я вывожу на экран предпоследнюю запись, он кроме неё выводит и последнюю, т.к. не видит конца строки. Что тогда говорить о первой - выводится вся структура. Как с этой проблемой справиться. Помню в паскале было всё легко. А здесь этот символ конца строки мешает. Может другой тип использовать. Дописывать символ конца строки очень напряжно если структура вырастит до 40 записей. Просьба пример привести на с, а не на с++. Спасибо. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
tenebris, Это все классно!
Код выкладывай. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
ничего не понял, если честно, начиная отсюда.
В структуре не бывает записей. Никогда не было, никогда не будет. Нет такого понятия в си отродясь очевидно что в char можно считать ровно один байт. Добавлено через 20 секунд +1 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| tenebris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Ну поле, поле. Запись это в паскале. Никак не могу перейти от него к си.
Добавлено через 5 минут и 32 секунды Вот
Вот, при выводу на экран h.flag - всё норма, показывается 2 байта в хексе. А вот когда я прошу вывести на экран h.inter ,мне показывается не только 9 байт но и ещё +2 байта след. пункта и т.д. А мне нужно точно, не вылезая на след. запись. Но здесь всё дело в конце строки. Но поля разного размра. Там инфа об образе. Как с этим бороться. Какой тип использовать? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
В C строки (а у тебя все поля твоей структуры именно они и есть) завершаются нулем. Так что в inter например влезет только 8 символов (и 9й ноль). Если у тебя там будет 9 символов (или не будет нуля в конце) то любая функция C, работающая со строками, будет перебирать память за границами твоего inter, пока не найдет 0 |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Про выравнивание не забудь! tenebris, Выложи еще код заполнения структуры + чтение из файла + запись в файл. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
| tenebris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Блин что никто не поможет чтоль. Ща выложу код и ещё раз подробно расскажу
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
впервые встречаю настолько понятное описание проблемы |
|||
|
||||
| tenebris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Есть бинарный файл, к примеру avi. У меня есть структура зоголовка файла. В свою структуры я пытаюсь прочесть этот заголовок. В этом заголовке нету никаких концов строк- спец. символов. Потому что там указателе к примеру данные о выделении памяти. Короче это всё условность. Делаю это так Приведу два поля структура для простоты и наглядности.
Вот. При выводе последнего поля pc - он выводиться нормально. Но когда я вывожу stack, выводиться оно само плюс поле pc, т.к. нету конца строки. Как это побороть? Это сообщение отредактировал(а) tenebris - 10.9.2008, 15:39 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
tenebris, ну ты оригинал.... А что у нас с выравниванием при таком способе считывания? Ну вообще для вывода каждого поля в твоем случае нужно писать отдельную функцию, которая знает длину этого поля и выводит только его. А вообще лучше завести отдельную структуру с константами длин полей и считывать каждое поле по отдельности в цикле лепя каждому '\0' в конец.
|
|||
|
||||
| tenebris |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Не знаю про что ты. Блин, ну а как пишут все проги для проигрывания файлов к примеру. Они же заголовок рассматривают. Это важная вешь, как они эту проблему решают. Длину каждого поля я знаю. Это определенные смещения, и каждое поле имеет свою длину т. е. константу. Нельзя там как-нить через указатели это реализовать. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
в зависимости от длин полей и настроек компилятора между полями могут быть "дырки", а ты пишешь, так будто они всегда одно за другим идут
ну вот и пользуйся этим знанием при считывании |
|||
|
||||
| tenebris |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
А что я разве этим не пользуюсь, когда в структуре обявляю переменную в 6 байт к примеру. 2) Второй вопрос появился. Допустим у меня в типе char записано значение 0XFFFF. Как мне его привести к типу int или другому целочисленному чтобы там тоже было ffff, но интерпретировался не как символ, а как число т.е. в десятичной системе 65535. Т.е. чтоб эти числа вывелись на экран Добавлено через 9 минут и 27 секунд 2)
Почему при изменении букв, значение переменой i не меняется хотя оно формируется из внутреннего кода букв? |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |