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

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


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

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

Выпуск № 439
от 17.06.2006, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 347, Экспертов: 50
В номере:Вопросов: 3, Ответов: 5


Вопрос № 45924: Здравствуйте. Проясните момент: Когда создается окно, заполняются поля структуры WNDCLASS. Там есть два пункта cbClsExstra и cbWndExstra. В литературе как-то туманно объясняется, что это какие-то дополнительные байты которые как-то там надо распреде...
Вопрос № 45929: Здравствуйте, уважаемые эксперты! Имеется файл (текстовый), в котором расположены цифры, расположенные примерно следующим образом: 3 5 7 1 6 8 13 2 и т.д. Каким образом можно каждую эту цифру (разделенные пробелами и символами...
Вопрос № 45962: Вопрос : Почему после выполнения вот таких действий: #include "stdafx.h" #include <stdio.h> void main(void) { FILE *stream; int b; stream = fopen("install.exe","w+"); fs...

Вопрос № 45.924
Здравствуйте. Проясните момент: Когда создается окно, заполняются поля структуры WNDCLASS. Там есть два пункта cbClsExstra и cbWndExstra. В литературе как-то туманно объясняется, что это какие-то дополнительные байты которые как-то там надо распределять. Объясните пожалуйста как это применять. Спасибо заранее.
Отправлен: 11.06.2006, 19:44
Вопрос задал: Lameruga (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: gitter
Здравствуйте, Lameruga!
cbClsExtra указывает количество дополнительных (т.е. в дополнение к sizeof(WNDCLASSEX)) байт, следующих за экземпляром структуры WNDCLASSEX. Когда структура, описывающая класс окна, копируется, надо копировать и эти байты. Доступ к этой дополнительной памяти можно получить с помощью функций SetClassLong/GetClassLong и SetClassLongPtr/GetClassLongPtr.

cbWndExtra указывает количество дополнительных байт, связанных с каждым экземпляром окна указанного класса. Т.е. когда создается окно этого класса, для него дополнительно выделяется cbWndExtra байт. Доступ к этой памяти можно получить с помощью функций SetWindowLong/GetWindowLong и SetWindowLongPtr/GetWindowLongPtr.

Взято здесь http://www.npksv.ru/soft/cp/faq/index5.shtml

Удачи!

Ответ отправил: gitter (статус: 5-ый класс)
Ответ отправлен: 11.06.2006, 20:35
Оценка за ответ: 5
Комментарий оценки:
Спасибо, все понятно.


Вопрос № 45.929
Здравствуйте, уважаемые эксперты!
Имеется файл (текстовый), в котором расположены цифры, расположенные примерно следующим образом:
3 5
7 1
6 8
13 2 и т.д.
Каким образом можно каждую эту цифру (разделенные пробелами и символами конца строки) считать в отдельные элементы массива? Пробовал fgets и fscanf, но смог добиться нужного эффекта. Хотябы подскажите, как считывать данные из файла по строкам? Например, считать первую строку, затем вторую и т.д. Если можно, приведите кусок кода с примером.
Заранее спасибо!
З.Ы. Пишу на турбо си в окнах.
Отправлен: 11.06.2006, 20:24
Вопрос задал: Велислав (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: gitter
Здравствуйте, Велислав!
Попробуйте так:

#include <stdio.h>
//создаем тестовый текстовый файл
void CreateDataFile()
{
FILE* f=fopen("c:\data.dat","a+");
fprintf(f,"%d %d ",3,5);
fprintf(f,"%d %d ",7,1);
fprintf(f,"%d %d ",6,8);
fprintf(f,"%d %d",13,2);
fclose(f);
}
//читаем тестовый текстовый файл
void PrintData()
{
FILE* f=fopen("c:\data.dat","r");
if (f==NULL) return;

int N=4;//количество строк в файлеж
int a[2][N];

int index=0;//вычитываемый номер строки
while (!feof(f))
{
//читаем первый элемент строки
fscanf(f,"%d",&a[0][index]);
//читаем второй элемент строки
fscanf(f,"%d",&a[1][index]);
//печатаем вычитанные из файла данные
printf("%d %d ",a[0][index],a[1][index]);
//переходим к следующей строке
index=index+1;
}
fclose(f);
}

int main()
{
CreateDataFile();
PrintData();
return 0;
}

Я надеюсь, это то что Вам нужно.
Удачи!
Ответ отправил: gitter (статус: 5-ый класс)
Ответ отправлен: 11.06.2006, 20:58

Отвечает: DeVampir
Здравствуйте, Велислав!
функция fgets (s, n, f) - считывает из файла f строку длиной n-1 символов (или до конца строки, если длина меньше n-1) в переменную s
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 11.06.2006, 21:57


Вопрос № 45.962
Вопрос :
Почему после выполнения вот таких действий:
#include "stdafx.h"
#include <stdio.h>

void main(void)
{
FILE *stream;
int b;
stream = fopen("install.exe","w+");
fseek(stream,6,SEEK_SET);
b=21;
fputc(b,stream);
fseek(stream,16,SEEK_SET);
b=22;
fputc(b,stream);
fclose(stream);

}

В файле стирается вообще всё кроме этих байт =) ???
Мне нужно поправить байты а не стирать весь файл =)
Как это cделать ?
А то я в C++ и C только начал учить на Delphi это было полегче =)
И как читать байты из файла ?
Мы просто с парнями программку пишем для вытаскивания wav файлов из игровых архивов на Delphi она уже написана но нужно на C++ !
Помогите очень нужно !
Отправлен: 12.06.2006, 01:41
Вопрос задал: Tamashev Denis M (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: X-MAN
Здравствуйте, Tamashev Denis M!
Вынужден вас огорчить! Так как вы хотите сделать, сделать нельзя. Нельзя именять содержимое уже созданного файла. Его можно только очистить или дописывать в конец. Если вы хотите изменить содержимое, сначала скопируйте его в память(например в массив char[]), измените, а затем запишите обратно в файл.
А для чтения есть можество функций: fgetc, fgets, fscanf, класс fstream и т.д.
---------
Оптимисты начинают день с имунеле, реалисты - с кофе, а пессимисты - с водки!
Ответ отправил: X-MAN (статус: 6-ой класс)
Ответ отправлен: 12.06.2006, 06:59
Оценка за ответ: 4
Комментарий оценки:
Извините но я должен вас огорчить !
Я нашёл способ для которого ненужно ничего читать !
И всё у меня получилось !
Прежде чем утверждать проверьте свои убеждения .
Чтоб доказать что у меня всё получилось я скину
Код смотрите:

//----------------------------------------------
#include "stdafx.h"
#include

void main(void)
{
FILE *stream;
int b;

stream = fopen("install.exe","rt+");
fseek(stream,0x6,SEEK_SET);
b=0x45;
fputc(b,stream);
fclose(stream);

}
//----------------------------------------------

Отвечает: DeVampir
Здравствуйте, Tamashev Denis M!
Попробуйте включить режим побитовой обработки (wb+), используйте беззнаковый тип. В приложении программа, которая заполняет файл n случайными числами, а потом сортирует его.

Приложение:

---------
Нам будет трудно - это терпимо! (с) М. Горшенев

Ответ отправил: DeVampir (статус: 1-ый класс)
Ответ отправлен: 12.06.2006, 09:46
Оценка за ответ: 4
Комментарий оценки:
Слушай какой ужас !
Я только начал учить C++ !
Я ешё неочень в терминах !
Но всё равно спасибо !
Кстати на мини форуме посмотри я скинул код
он намного короче и работо способный !


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное