Russian Qt Forum
Ноябрь 25, 2024, 23:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Запись структуры в файл  (Прочитано 14948 раз)
merke
Гость
« Ответ #15 : Ноябрь 16, 2010, 13:15 »

Спасибо!

Вы очень меня сегодян выручаете! Очень вам благодарен!!!

Ещё вопрос:

Код:
strcpy(m_str.name,  "alexalex");

Как можно по другому внести значение в m_str.name только чтобы в конец не добавлялся /0 ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #16 : Ноябрь 16, 2010, 13:19 »

Не. name и должен быть на один символ больше. строка char должна заканчиваться на '\0', иначе можно выйти за ее пределы.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #17 : Ноябрь 16, 2010, 13:23 »

Просто в рамках ТЗ там описана структура например

имя файла строковая переменная - 8 байт
дата изменения строковая перменная - 10 байт

и т.д.

и мне нужно что именно было в файл записано 18 байт и ни на один больше ни на один меньше. Вот к чему я все веду.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #18 : Ноябрь 16, 2010, 13:26 »

Так у тебя и записывается правильно.
char c [4] = "123\0" в файл запишется как 3 байта. Т.е. все нормально.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #19 : Ноябрь 16, 2010, 13:34 »

Ну вот смотрите скидываю вам опять исходник, гляньте плиз. Может я опять что то намудрил, но у меня вместо 24 байт пишется 26 байт.

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #20 : Ноябрь 16, 2010, 13:40 »

ds.writeRawData((char*)calData.fam,sizeof(calData.fam)); замени на
ds.writeRawData((char*)calData.fam,8);
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #21 : Ноябрь 16, 2010, 13:47 »

заменил на 8 и теперь записывается конечно же 24 байта, считывается какая то белибирдистика alexalex†famafama¿ famafama¿ 8 4
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #22 : Ноябрь 16, 2010, 13:51 »

Код
C++ (Qt)
friend QDataStream &operator<<(QDataStream & ds, const my_struct &calData)
{
ds.writeRawData((char*)calData.fam, 8);
ds.writeRawData((char*)calData.name, 8);
 
ds << calData.age << calData.nomer;
return ds;
}
friend QDataStream &operator>>(QDataStream & ds, my_struct &calData)
{
ds.readRawData((char*)calData.fam, 8);
calData.fam [8] = '\0';
ds.readRawData((char*)calData.name, 8);
calData.fam [8] = '\0';
ds >> calData.age >> calData.nomer;
return ds;
}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #23 : Ноябрь 16, 2010, 14:04 »

Во супер! Сппасибо! Низкий паклон Вам!!!
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.221 секунд. Запросов: 23.