Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 53
от 03.03.2005, 18:00

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 8


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное