Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 204
1

Чтение бинарного файла в строку: читается только один байт

18.05.2017, 16:39. Просмотров 1540. Ответов 3

Читаю бинарный файл в строку, но почему-то читает только 1 байт. Где здесь может быть ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
//ЧТЕНИЕ БИНАРНОГО ФАЙЛА В СТРОКУ
FILE *f = fopen("111.bin", "rb");
if(!f)
  {perror("111.bin"); exit(1);}
long n=filelength(fileno(f));
char *s=new char[n];
int ns=fread(&s, sizeof(s), 1, f);
delete[]s;
fclose(f);
 
ShowMessage(IntToStr(ns));//=1 Почему читает только 1 байт?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2017, 16:39
Ответы с готовыми решениями:

OpenCV. Некорректное чтение бинарного файла
Здравствуйте. При использовании opencv (2.4.6) столкнулся со следующей особенностью (или багом)....

Чтение/запись определенного количества байт из бинарного файла
Подскажите пожалуста как реализовать на с++ в RAD Studio чтение определенного количества байт из...

Чтение бинарного файла
Здравствуйте! Не могу прочитать бинарный файл, уже весь интернет обшарил, по пять страниц в гугле,...

Чтение бинарного файла
Здравствуйте! Я пробую прочитать бинарный файл от CAD системы (он представляет из себя архив в иде...

3
1932 / 1761 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
18.05.2017, 20:54 2
Лучший ответ Сообщение было отмечено pav1uxa как решение

Решение

Цитата Сообщение от Инженер_3 Посмотреть сообщение
почему-то читает только 1 байт
int ns=fread(&s, sizeof(s), 1, f); -> int ns=fread(s, sizeof(char), n, f);

Не по теме:

Кстати, в Вашем коде нет ничего от C++, тут чистый C.

1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 204
18.05.2017, 22:14  [ТС] 3
Цитата Сообщение от pav1uxa Посмотреть сообщение
int ns=fread(&s, sizeof(s), 1, f); -> int ns=fread(s, sizeof(char), n, f);
А знак амперсанда '&' перед 's' какую роль играет? Работает с ним и без него. С ним - это передача адреса? А без него?
0
1932 / 1761 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
18.05.2017, 23:40 4
Цитата Сообщение от Инженер_3 Посмотреть сообщение
А знак амперсанда '&' перед 's' какую роль играет?
Никакую, это ошибка в данном случае. (неопределенное поведение, undefined behaviour)
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Работает с ним и без него.
С ним не работает. То есть количество считанных байт Вы получите, но данные будут считываться неизвестно куда, а не в массив s. Правильно либо s, либо &s[0] в данном случае. Оба эти варианта равносильны и правильны.
Цитата Сообщение от Инженер_3 Посмотреть сообщение
С ним - это передача адреса? А без него?
Без него передается указатель на первый элемент массива. С ним адрес указателя, что является бессмысленным. С тем же успехом туда можно запихнуть адрес любой другой переменной.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2017, 23:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Чтение бинарного файла
Добрый день, ребята помогите разобраться с проблемой, читаю бинарный файл с последующим...

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

Чтение бинарного файла в MFC
Доброго времени суток всем! Подскажите, что-то впадаю в ступор. Есть бинарный файл: Задача,...

В память процесса WriteProcessMemory записывает только один байт
Есть код, с помощью которого можно писать в память процесса по адресу, но он пишет только первый...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.