Форум программистов, компьютерный форум CyberForum.ru

Чтение структуры из файла. (Google Test) - C++

Восстановить пароль Регистрация
 
gastelo56
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 18
21.06.2013, 12:24     Чтение структуры из файла. (Google Test) #1
Есть структура

C++
1
2
3
4
5
6
struct ApRegFileHead
{
    char *rHead;
    unsigned int version;
    unsigned int rezerv;
};
Она записана вначале файла.
Хочу открыть файл и проверить, верно ли записана эта структура. Для начала просто проверяю те ли чар внутри

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int testFunc::FindHead(char *hmsg){
    
    ApRegFileHead head1 = {hmsg,2,2};
        
    int finheadflag = 0;
    FilesSize();
    if (fIn != NULL) {
        fread(&head1, sizeof(head1), 1, fIn);
        printf(head1.rHead);
        if (head1.rHead == hmsg)
            finheadflag = 1;
    } else {
        printf("File not open");
        finheadflag = 0;
    }
    fclose(fIn);
    return finheadflag;
}
Файл открывает нормально. Но строка printf(head1.rHead); выдает в консоль следующее:
unknown file: error: SEH exception with code 0xc0000005 throw in the test body

Добавлено через 39 минут
Ошибка как я понял значит, что я обращаюсь к памяти которой не существует.

Но почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 12:24     Чтение структуры из файла. (Google Test)
Посмотрите здесь:

C++ Корявое чтение структуры из файла
C++ Чтение структуры из файла
C++ Чтение структуры из файла
чтение структуры из файла C++
Чтение 10-ой структуры из бинарного файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2013, 12:31     Чтение структуры из файла. (Google Test) #2
Цитата Сообщение от gastelo56 Посмотреть сообщение
char *rHead;
Так ты из файла не прочитаешь. В файле ты же не будешь хранить указатель.
В файле, скорее всего, хранится набор символов конкретного размера.
gastelo56
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 18
21.06.2013, 12:34  [ТС]     Чтение структуры из файла. (Google Test) #3
Цитата Сообщение от Vourhey Посмотреть сообщение
Так ты из файла не прочитаешь. В файле ты же не будешь хранить указатель.
В файле, скорее всего, хранится набор символов конкретного размера.
в начале файла у меня бинарно записаны 12 байт чар, 4 байта инт, 4 байта инт. Дальше идет другая информация

как мне сравнить вот эти первые байты с моими эталонными?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2013, 12:38     Чтение структуры из файла. (Google Test) #4
Если ты хочешь использовать именно указатель, то выдели динамическую память, для 12 символов и в выделенную память считай их из файла.

Добавлено через 1 минуту
Но только тебе придется считывать отдельно в элементы структуры. Либо char ...[12] если без указателя.
gastelo56
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 18
21.06.2013, 12:58  [ТС]     Чтение структуры из файла. (Google Test) #5
Цитата Сообщение от Vourhey Посмотреть сообщение
Если ты хочешь использовать именно указатель, то выдели динамическую память, для 12 символов и в выделенную память считай их из файла.

Добавлено через 1 минуту
Но только тебе придется считывать отдельно в элементы структуры. Либо char ...[12] если без указателя.
понял, только вопрос

выделил памяти char *readHmsg = (char*)malloc(strlen(hmsg));

считал
fread(readHmsg, strlen(hmsg), 1, fIn);

Но почему что считались сами 12 байт чар, но плюс вконце еще лишнее

Добавлено через 3 минуты
надо сделать fread(readHmsg, strlen(hmsg)+1, 1, fIn); ?

Добавлено через 2 минуты
такой вариант вроде выдает верную строку

но почему то при сравнении readHmsg == hmsg возвращает false
?????
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2013, 13:28     Чтение структуры из файла. (Google Test) #6
Добавлено через 24 секунды
Цитата Сообщение от gastelo56 Посмотреть сообщение
readHmsg == hmsg
Так строки не сравниваются. strncmp

Добавлено через 2 минуты
Цитата Сообщение от gastelo56 Посмотреть сообщение
char*
Это не строка, а указатель на символ/буфер. Он может содержать в себе, что угодно. Дело в том, как ты с этим буфером работаешь.
А ты сраниваешь указатели. Указатель содержит адрес.

Перепутал твои имена переменных, сори.
Цитата Сообщение от gastelo56 Посмотреть сообщение
Но почему что считались сами 12 байт чар, но плюс вконце еще лишнее
А длина у тебя какая строки hmsg? Ты нулевой символ в конце строки поставил, после того, как считал? А он в файле есть? Думаю. что ты выводишь просто неправильно ее. Либо читаешь без нулевого символа в конце.
Yandex
Объявления
21.06.2013, 13:28     Чтение структуры из файла. (Google Test)
Ответ Создать тему
Опции темы

Текущее время: 07:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru