Вопрос по д

  • Автор темы Arthur
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Arthur

Гость
#1
Есть консольное приложение-в нем строковый массив DATA[10], заполненный DATA[1]=1;DATA[2]=2...DATA[n]='M'(значение по умолчанию)
Требуется создать в новый ДИНАМИЧЕСКИЙ массив(n я знаю) засунуть значения с 1 по n(необходимо для загрузки в буффер обмена)

Пытался сделать указатель а в него при помощи адресной арифметики (sizeof(char)) запихнуть значения, все получается, НО при выводе помимо необходимого значения выводит символы
Выделили под указатель 1 байт, программа умудрилась забить туда 4 чара и еще немного мусора осталось!
DATA3= ( char*) malloc(1);

Помогите пожалуйста)) Желательно писать попроще... Заранее спасибо


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

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?

Спасибо что обратили внимание))


/////////////////////////////////////////////////////////////////
"И еще один вопрос, как в консоли обрабатывать Message?"- немного подразобрался
Теперь новая проблема:

HWND thisWnd=FindWindow(L"ConsoleWindowClass", NULL);
HWND hWnd = FindWindow(L"FineReader8MainWindowClass", NULL );
MSG msg;

while(1>0){
static HWND hNextViewer;
hNextViewer=SetClipboardViewer(thisWnd);
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,NULL);
}
Проблема в том что программа не реагирунт на сообщения постоянно лезет только одно с номером 49367, елси пишу
GetMessage(&msg,hWnd, 0,0); программа вообще зависает

Кто сможет напишите свое мнение
 

grigsoft

Well-Known Member
15.11.2005
735
0
#2
код приведи, потому как ничего не понятно. ну кроме того что ты не знаешь что индексы массива в С начинаются с 0.
 
A

Arthur

Гость
#3
Впринципе саму проблему решил, понял что указатель надо заполнять также как массив. То что массив начинается с нуля знаю, но иногда забываю) нулевой бит приписываю вручную. Удивляет лишь одна вешь

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?

Спасибо что обратили внимание))
 
Статус
Закрыто для дальнейших ответов.