Вопрос № 17506: Здравствуйте.
Я недавно начал программировать на С++, поэтому сейчас изучаю консоль.
Узнал про указатели, и понял что они узнают значение не с переменной, а с ее адреса.
Можно ли узнать значения в любом адресе оперативной памяти. Если НЕ ...Вопрос № 17526: Здравствуйте! У меня не получается: 1) переменая типа int (r->year) записывается в фаил в двоичнов виде, когда запись в фаил ведется в текстомом режиме! Как записать его нормально? 2) При у казания записи в фаил в двоичном режиме, информация запис...
Вопрос № 17506
Здравствуйте.
Я недавно начал программировать на С++, поэтому сейчас изучаю консоль.
Узнал про указатели, и понял что они узнают значение не с переменной, а с ее адреса.
Можно ли узнать значения в любом адресе оперативной памяти. Если НЕ при помощи указателей, то каким другим способом (любым).
Подойдут любые ответы. (коды, ссылки на коды, ссылки на доки, и др.)
Отправлен: 26.02.2005, 00:26
Вопрос задал: FW (статус: Посетитель)
Всего ответов отправлено: 4
Отвечает: vitya
Здравствуйте, FW!
Зависит от операционной системе. В Unix/Linux/WIndowsNT нельзя, если только вы не пишете программу уровня ядра.
Ответ отправил: vitya (статус: Профессор)
Отправлен: 26.02.2005, 13:04 Оценка за ответ: 3
Отвечает: Bob Johnson
Здравствуйте, FW! Указатели не "узнают" значение переменной, они просто указывают на определенный адрес в памяти компьютера. Естественно, с их помощью можно узнать значение любой ячейки оперативной памяти, если к ней у тебя есть доступ на чтение. Делается это так: char *p; p = (char*)0x400000;
* EMan2.0: ---===*** Debug mode ***===---
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 26.02.2005, 14:15 Оценка за ответ: 5
Отвечает: AxMAD
Здравствуйте, FW!
Вообще-то можно, но всё зависит от того под какой операционкой вы работаете!
Некоторые компиляторы понимают и такое:
unsigned char *bf;
for(bf=0;bf<0x00FFFFFF;bf++)
{
Просматриваем память через *bf
}
Ответ отправил: AxMAD (статус: Студент)
Отправлен: 26.02.2005, 16:56 Оценка за ответ: 4
Отвечает: Voituk Alexander
Здравствуйте, FW!
Только под MS-DOS и при помощи указателей.
Объявляешь указатель на то, что хочешь смотреть.
Например байты unsigned char *bb;
или слова unsigned int *ii;
А адрес формируешь так bb = MK_FP(0x8E00,0x0000);
где первый параметр - сегмент памяти, а второй - смещение.
Ответ отправил: Voituk Alexander (статус: 3-ий класс)
Отправлен: 28.02.2005, 13:56
Вопрос № 17526
Здравствуйте! У меня не получается: 1) переменая типа int (r->year) записывается в фаил в двоичнов виде, когда запись в фаил ведется в текстомом режиме! Как записать его нормально? 2) При у казания записи в фаил в двоичном режиме, информация записывает в текстовом!
Приложение:
Отправлен: 26.02.2005, 10:43
Вопрос задал: Сергей Николаевич (статус: Посетитель)
Всего ответов отправлено: 4
Отвечает: vitya
Здравствуйте, Сергей Николаевич!
fwrite записывает данные в бинарном формате. Хотите текстовой - тогда fprintf.
Ответ отправил: vitya (статус: Профессор)
Отправлен: 26.02.2005, 13:06
Отвечает: Bob Johnson
Здравствуйте, Сергей Николаевич! И понятно, что не получается - ты же пишешь саму переменную, т.е. байты, которые ее образуют, а они и есть в двоичном режиме. Тебе можно: 1. Преобразовать число в строку (_itoa или sprintf), затем записать в файл строку. 2. Использовать fprintf, который сам все преобразует. Я бы выбрал второй вариант: fprintf (fil, "%i", r->year);
* EMan2.0: ---===*** Debug mode ***===---
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 26.02.2005, 13:55
Отвечает: AxMAD
Здравствуйте, Сергей Николаевич!
1) Функции fread/fwrite для двоичного !!!. А для того чтобы записывалось в текстовом нужно или сразу указывать в формате текста или конвертировать...
2) Я думаю понятно что существую функции для работы с текстом и для работы болками памяти !!!
Ответ отправил: AxMAD (статус: Студент)
Отправлен: 26.02.2005, 17:03
Отвечает: Voituk Alexander
Здравствуйте, Сергей Николаевич!
Во первых ты не уточнил - в каком режиме ты хочешь писать.
Во вторых - не пользуйся этими корявыми структурами FILE и к ним корявыми функциями.
Если пишешь в консоли и на С++, пользуйся нормальным классом iostream. Для работы с файлами есть его наследник fstream. С ним работать просто. И он работает в текстовом режиме.
#include <iostream.h>
fstream f0;
f0.open("Xaxa",ios::in | ios::binary);
if(f0.bad())
{
cout << "Error open file > " << "Xaxa" << endl;
return;
}
f0 << r->year << " " << r->avtor и т.д.
f0.close();
А если определишь для своей структуры оператор <<, то сможешь писать в файл
f0 << r;
Ответ отправил: Voituk Alexander (статус: 3-ий класс)
Отправлен: 28.02.2005, 12:06