Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2008, 00:02   #1
Enikov
 
Регистрация: 30.12.2008
Сообщений: 3
По умолчанию Вопрос по адресной арифметике и Message в консольных приложениях

Win32 Console Application, Visual Studio 2005

char DATA2[10]; //Создал массив,он заполнен необходимыми мне данными,часть элементов осталась по умолчанию
char *DATA3;//Указатель
DATA3=(char *) malloc(1);//Под указатель выделил 1 байт памяти
DATA3=DATA;// Здесь вопрос: при присваивание указатель будет ссылаться на 1 байт информации? Или сам указатель будет вмещать в себя один байт адреса?


Вот что я прочитал в книжке Шилдта, там такой пример
int a[100];
int *p;
p=(int*)malloc(50*sizeof(int));

Написано что выделяется память под 50 целых чисел, т.е. при присваивание

p=a;
по логике книжки указатель должен ссылаться на участок памяти в которой 50 чисел.

/////////////////////////////////////////////////////////////////
Вопрос про получние Message в консоли

HWND thisWnd=FindWindow(L"ConsoleWindowC lass", NULL);
HWND hWnd = FindWindow(L"FineReader8MainWindowC lass", NULL );
MSG msg;

while(1>0){
static HWND hNextViewer;
hNextViewer=SetClipboardViewer(this Wnd);
a=GetMessage(&msg,NULL, 0,0);
Sleep(5000);
if(msg.message==WM_DRAWCLIPBOARD){//Если идет сообщение об изменение буфера обмена
printf("Press ENTER to take data from you buffer");
PostMessage(hNextViewer,NULL,NULL,N ULL);
}
Проблема в том что программа не реагирунт на сообщения постоянно лезет только одно с номером 49367, елси пишу
GetMessage(&msg,hWnd, 0,0); программа вообще зависает
Enikov вне форума Ответить с цитированием
Старый 31.12.2008, 01:51   #2
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

В си не бельмесом (

Последний раз редактировалось capta1n; 31.12.2008 в 01:54.
capta1n вне форума Ответить с цитированием
Старый 31.12.2008, 14:30   #3
Enikov
 
Регистрация: 30.12.2008
Сообщений: 3
По умолчанию

В смысле??
Enikov вне форума Ответить с цитированием
Старый 31.12.2008, 14:44   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Си не знаю, а на этом форуме не знаю как удалить сообщение
capta1n вне форума Ответить с цитированием
Старый 31.12.2008, 16:54   #5
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Мда... Крутое у вас понимание...
Цитата:
int *p;
p=(int*)malloc(50*sizeof(int));

Написано что выделяется память под 50 целых чисел, т.е. при присваивание

p=a;
по логике книжки указатель должен ссылаться на участок памяти в которой 50 чисел.
Вы сначала создаете указатель... Потом выделяете ему память в куче на 50 целых чисел... Ну а потом вы просто меняете значение указателя на статический массив a[]... Т.е. память, которую вы выделили безвозвратно утеряна!!! Это очень плохо...

P.S. так в какой, говорите, книге такие примеры хорошие???

А насчет второго... Что именно требуется от программы, т.е. что она должна "делать"?
StarWorm вне форума Ответить с цитированием
Старый 01.01.2009, 19:44   #6
Enikov
 
Регистрация: 30.12.2008
Сообщений: 3
По умолчанию

Спасибо, я ошибся, действительно это пример утечки памяти) А если вот такой пример:
int *p;
int a[100];
p=(int*)malloc(50*sizeof(int));
*p=*a;//Вроде бы разименованному указателю(на 50 чисел), присваивают значение массива(из 100 чисел). Массив это ведь адрес первого элемента
////////////////////////////////////
По второй части. Вообще программа должна постоянна висеть в цикле. При изменение буфера(не работает) обмена должна начинаться некая его обработка(работает и извлекаеться и обрабатывается и обратно вносится, но проблема в том что если делать это без сообщения она на почти каждый момент будет открывать закрывать буфер обмена что не дает остальным программам работать с ним, поэтому я решил добавить сообщение)



HWND thisWnd=FindWindow(L"ConsoleWindowC lass", NULL);
HWND hWnd = FindWindow(L"FineReader8MainWindowC lass", NULL );
MSG msg;

while(1>0){
static HWND hNextViewer;
hNextViewer=SetClipboardViewer(this Wnd);//Ставим себя в очередь
a=GetMessage(&msg,NULL, 0,0);//??Получаем ??ВСЕ?? сообщения
Sleep(5000);//Техническая пауза для дебага))
if(msg.message==WM_DRAWCLIPBOARD){//Если идет сообщение об изменение буфера обмена
printf("Press ENTER to take data from you buffer");//Тоже для дебага
}

Напомню что это консольное приложение, заранее спасибо)
Enikov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват адресной строки браузера Garacio_cain Работа с сетью в Delphi 4 23.10.2008 13:48
HTML,как заменить текст в адресной строке? Ладушка HTML и CSS 13 28.08.2008 19:37
Message-ы Altera Общие вопросы Delphi 9 15.02.2008 09:08
Send Message _SERGEYX_ Работа с сетью в Delphi 5 30.10.2007 06:38
Как перехватить/узнать содержимое адресной сроки? s-force Работа с сетью в Delphi 5 27.08.2007 10:39