С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
1

Поиск ошибки в fread

30.05.2014, 19:25. Показов 2357. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня возникла ошибка. Мне нужно прочесть данные с бинарных файлов. Бинарный файл "a.dat" содержит в себе числа '7 0 1 0 1 0 1 0 2 6 2', но по какой-то причине выводит только 7 символ, при попытки изменить fread(&d, sizeof(d), 1, f1); вылазит Stack around the variable 'd' was corrupted.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream> 
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "RUS");
    FILE *f1, *f2, *f3;
    f1 = fopen("a.dat", "rb"); // открываю файл a.dat
    if ((f1 = fopen("a.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
        cout << "Файл 'a.dat' успешно открыт и готов к чтению!" << endl;
    f2 = fopen("b.dat", "rb"); // открываю файл b.dat
    if ((f2 = fopen("b.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
        cout << "Файл 'b.dat' успешно открыт и готов к чтению!" << endl;
    f3 = fopen("c.dat", "wb"); // открываю файл c.dat
    char d;
    fread(&d, sizeof(d), 1, f1);
    cout << d  << endl;
    int fclose (char *f1);
    int fclose (char *f2);
    int fclose (char *f3);
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
30.05.2014, 19:25
Ответы с готовыми решениями:

Ошибка Warning: fread() [function.fread]: Length parameter must be greater than 0
Есть строка кода if(!preg_match('/'.$user.&quot;/&quot;,fread($fusers,filesize(&quot;user/users.txt&quot;))) &amp;&amp;...

fread
Подскажите пожалуйста, как можно записать в структура данные из файла используя fread, просто все...

Работа с fread()
Нужно прочитать данные из файла и вывести на экран. Но когда я вывожу то ещё дописываются ненужные...

Fread и fout?
Здравствуйте. Была поставлена предо мной задача: Сделать структуру, которая через меню будет...

12
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
30.05.2014, 19:33 2
Лучший ответ Сообщение было отмечено Anwer как решение

Решение

Цитата Сообщение от Anwer Посмотреть сообщение
при попытки изменить fread(&d, sizeof(d), 1, f1);
при попытке изменить... что?
количество символов?
Ну правильно! в одну переменную типа char можно считать лишь один символ(байт)!
0
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
30.05.2014, 20:34  [ТС] 3
Тогда как мне прочесть нормально "a.dat" ? Что бы '7 0 1 0 1 0 1 0 2 6 2' из файла "a.dat" были помещены в переменную d?
0
0 / 0 / 1
Регистрация: 22.05.2014
Сообщений: 4
30.05.2014, 20:52 4
см документацию:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
первым параметром идет указатель на переменную, вторым количество байт, которые необходимо считать из файла. Таким образом, в вашем случае сначала надо выделить (например, с помощью функции calloc или malloc) кусок памяти длиной NN (байт, в переменной d сохранить указатель на этот кусок.
вместо строк 23-24:
C
1
2
3
4
5
int numOfBytesToRead  = 50;
char* d =  malloc (numOfBytesToRead);
fread(d,sizeof(char),NN,f1);
//разыменовываем d, делаем с ним что-то
free(d);
0
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
30.05.2014, 21:07  [ТС] 5
Не получилось, скрин ошибок выложил.
Поиск ошибки в fread

Мне просто нужно сделать так что бы считались числа с файла a.dat. Функция malloc почему-то не работает
0
0 / 0 / 1
Регистрация: 22.05.2014
Сообщений: 4
30.05.2014, 21:20 6
замени NN на NumOfBytesToRead
перед malloc добавь (char*)
0
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
30.05.2014, 21:34  [ТС] 7
Поиск ошибки в fread
Все равно не вышло. Все правильно сделал, проверил бинарный файл, все чисто. Есть ли ещё способы считать данные с файла??
0
0 / 0 / 1
Регистрация: 22.05.2014
Сообщений: 4
30.05.2014, 21:38 8
Лучший ответ Сообщение было отмечено Anwer как решение

Решение

есть, например с помощью класса std::ifstream

Добавлено через 1 минуту
насчет ошибки
либо не разыменовал указатель, либо с файлом что-то не так...
0
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
30.05.2014, 23:00  [ТС] 9
Может ещё кто подскажет. Данные из файла a.dat, в файл c.dat записывает отлично. Но почему-то вылазит ошибка, что стек для переменной dL переполнен. Stack around the variable 'dL' was corupted. Всеравно так же по сути ошибка что и была. Может кто не будь написать нормальный код? Я уже не знаю в чем ошибки... Нужно что бы данные из файла a.dat были записаны в переменную dL, а из переменной dL записать данные в пустой файл c.dat.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "RUS");
    FILE *f1, *f2, *f3;
    f1 = fopen("a.dat", "rb"); // открываю файл a.dat
    if ((f1 = fopen("a.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
        cout << "Файл 'a.dat' успешно открыт и готов к чтению!" << endl;
    f2 = fopen("b.dat", "rb"); // открываю файл b.dat
    if ((f2 = fopen("b.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
        cout << "Файл 'b.dat' успешно открыт и готов к чтению!" << endl;
    f3 = fopen("c.dat", "wb"); // открываю файл c.dat
    int dL;
    fread(&dL, sizeof(int), 2, f1);
    fwrite(&dL, sizeof(int), 2, f3);
    int fclose (char *f1);
    int fclose (char *f2);
    int fclose (char *f3);
    return 0;
}
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
31.05.2014, 01:18 10
Цитата Сообщение от Anwer Посмотреть сообщение
стек для переменной dL переполнен
Цитата Сообщение от Anwer Посмотреть сообщение
Stack around the variable 'dL' was corupted
Поищи в словаре слово corrupted что ли...
Цитата Сообщение от Anwer Посмотреть сообщение
f2 = fopen("b.dat", "rb"); // открываю файл b.dat
* * if ((f2 = fopen("b.dat", "rb")) == NULL) // ошибка открытия
зачем 2 раза делаешь fopen?
fread(&dL, sizeof(int), 2, f1);
почему два-то блин! у тебя одна переменная типа int! Естественно второй нет!
1
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
04.06.2014, 00:54  [ТС] 11
Проблема с функцией fread, до сег пор осталась. Получается запись данных из одного файла a.dat, в другой файл c.dat, но после записи данных из одного файла в другой файл выдает ошибку Stack around the variable 'a' was corupted. Т.е. в файле a.dat числа (629520), скомпилировал программу, в файле c.dat оказались эти же числа (629520), но при этом выдало ошибку Stack around the variable 'a' was corupted. . Как с этим быть, и как эту проблему решить, помогите пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <fstream>
#include <iostream>
#include <fstream>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "RUS");
    FILE *f1, *f2, *f3;
    long int a, count;
    f1 = fopen("a.dat", "rb+"); // открываю файл a.dat
    if ((f1 = fopen("a.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
        cout << "Файл 'a.dat' успешно открыт и готов к чтению!" << endl;
    f3 = fopen("c.dat", "wb+"); // открываю файл c.dat
    if ((f2 = fopen("b.dat", "rb")) == NULL) // ошибка открытия
    {    
        cout << "Невозможно открыть файл." << endl;
    }
    else
    {
        cout << "Файл 'c.dat' успешно открыт и готов к записи!" << endl;
    }
    for (int i = 0; i < 100; i++)
    {
    fseek(f1, 0L, SEEK_END);   
    count = ftell(f1);  
    fseek(f1, 0L, SEEK_SET);
    fread(&a, count, 1, f1);
    fseek(f1, 0L, SEEK_SET);
    fwrite(&a, count, 1, f3);
    }
    fclose (f1);
    fclose (f2);
    fclose (f3);
    return 0;
}
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
04.06.2014, 01:25 12
да что там думать-то? тож мне проблема!
a - должен быть массивом, а не одиночной переменной! Я тебе это уже не первый раз говорю! Ты вообще мои комменты читаешь?
1
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
04.06.2014, 01:28  [ТС] 13
Все получилось Спасибо
0
04.06.2014, 01:28
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
04.06.2014, 01:28
Помогаю со студенческими работами здесь

Не работает fread()
Почему выводится -858993615, если в файле &quot;f.txt&quot; содержится простая &quot;1&quot;? Вот листинг программы:...

Непонятки с fread
Добрый день. Столкнулся с такой проблемой: читаю обычный текстовый файл, однако помимо его...

Не работает fread()
Почему такой странный вывод?

Вывод с Fread
Не выводит с помощью Fread, сейчас его нету, использвал fgets, но мне именно нужно fread, помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru