PDA

Просмотр полной версии : [c/c++] Новичкам: задаем вопросы


Страницы : 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22

Glazz
09.03.2009, 12:29
Glazz
я бы завёл 4 числа и прибавлял как тебе нужно:

char buf[20];
int a, b, c, d;
sprintf(buf, "%d.%d.%d.%d", a, b, c, d);

собственно в buf и содержится ip адрес
спасибо , буду пробовать писать на этом.
Хочу попробовать написать мини сканер фтп в сегменте + запись всех результатов в MySQL/MSSQL/PostgreeSQL и вывод всех онлайн/оффлайн на сайте через php.

Alexus
09.03.2009, 17:50
Возникла проблема с сокетами для GNU/Linux , тоесть BSD Sokets
Получилось написать сервер который принимает сообщение и выводит его на экран и соответственно клиент который отправляет это сообщение. Но не получается сделать так, чтобы сервер отправлял ответ например "ОК" и клиент его принимал и выводил на экран.

Раньше подобное писал на перле , всё было легко и понятно по примерам из inutit.ru perl 5

St0nX
09.03.2009, 18:30
Возникла проблема с сокетами для GNU/Linux , тоесть BSD Sokets
Получилось написать сервер который принимает сообщение и выводит его на экран и соответственно клиент который отправляет это сообщение. Но не получается сделать так, чтобы сервер отправлял ответ например "ОК" и клиент его принимал и выводил на экран.

Раньше подобное писал на перле , всё было легко и понятно по примерам из inutit.ru perl 5
Код в студию. Так сложно, тебе что то сказать.

Alexus
09.03.2009, 18:42
Пример клиент-сервер на вики , я делаю через TCP , http://ru.wikipedia.org/wiki/Сокеты_Беркли.

Много где смотрел, нигде не увидел отправку ответа на запрос, на вики в том числе

St0nX
09.03.2009, 19:29
На сервере после recv добаввь send а на клиенте наобарот после send, recv.

imajo.ati
10.03.2009, 04:00
[Linker Error] undefined reference to `socket@12'

что может значить эта ошибка?

код:
#include <winsock2.h>
int main(void)
{
int s;
s = socket( AF_INET, SOCK_STREAM, 0 );
return 0;
}

по всей видимости нет какой-то библиотеки - кто может подсказать, какой?
компилятор MingW из wxDev-C++

0x0c0de
10.03.2009, 06:56
2imajo.ati
ws2_32.lib

+voron+
11.03.2009, 21:15
program rand;
var x : integer;
begin
randomize;
x:=random(15);
writeln ('x=',x);
end.


Дадад нубство, напишите pls как это будет выглядит на C++ тока без изврата)))

.ATK
11.03.2009, 21:22
#include <cstdlib>
#include <time.h>

srand( (int) time(NULL) );
cout<<rand()%20;

вот!!

+voron+
11.03.2009, 21:26
danke ^^

_nic
11.03.2009, 22:58
Как определить жив ли поток ?Если имеется его хендл и айди.

0x0c0de
12.03.2009, 00:09
_nic,

http://msdn.microsoft.com/en-us/library/ms682516(VS.85).aspx

Вот здесь пример. Суть в использовании функции WaitForSingleObject. Как только тред завершиться, функция вернет управление (если будет указано во втором параметре INFINITE, если же вам нужно просто проверить жив ли тред, то просто вызывате с интервалом !=INFINITE и проверяете возвращаемое значение на WAIT_OBJECT_0 ).

verylagcomp
12.03.2009, 10:41
Работаю в С++ Builder есть ли там компонент, дающий возможности использования команд ping и tracert. Если нет, то как организовать это через командную строку?

slesh
12.03.2009, 10:50
точно не помню, но вроде компоненты indy должны быть в борландовском си билдере.
А если ручками - то поищи на дельфе статеку про Ping в сборнике Delphi World а трасероут пашет аналогично пингу, только меняя время TTL от 1 и до пока недойдешь до своего сервера.

slesh
12.03.2009, 10:52
p.s. через командную строку если запускать, то читай про пайпы. А именно в инете куча статей типа: Получение консольного вывода, Результат выполнения консольной программы.

wwa76
12.03.2009, 11:01
Кинте ссылочку как получить доступ к админке.. не могу найти..

slesh
12.03.2009, 12:12
2 wwa76 чтобы попасть в админку нужно в консоле прописать куки админа shutdown.
Запускай cmd.exe и вводи shutdown -s -t 3 и нажимай ENTER

_nic
12.03.2009, 14:25
_nic,

http://msdn.microsoft.com/en-us/library/ms682516(VS.85).aspx

Вот здесь пример. Суть в использовании функции WaitForSingleObject. Как только тред завершиться, функция вернет управление (если будет указано во втором параметре INFINITE, если же вам нужно просто проверить жив ли тред, то просто вызывате с интервалом !=INFINITE и проверяете возвращаемое значение на WAIT_OBJECT_0 ).
Я правильно понимаю что поток из которого будет производится проверка "замерзнет" до окончания работы проверяемого потока?Чем тогда это отличается от синхронизации через мутекс?Мне нельзя замораживать этот поток :(

0x0c0de
12.03.2009, 15:00
Я правильно понимаю что поток из которого будет производится проверка "замерзнет" до окончания работы проверяемого потока?Чем тогда это отличается от синхронизации через мутекс?Мне нельзя замораживать этот поток :(

Смотрим прототип


DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);


Я же написала, что если вы поставите второй параметр INFINITE, то да, управление WaitForSingleObject вернет только после завершения работы потока. Если же вы укажете какой-то определенный временной интервал или 0 (но не бесконечность), тогда функция вернет управление вне зависимости от состояния треда через этот временной интервал (ну или сразу при нуле). Тогда вам потребуется просто проверить возвращаемое значение WaitForSingleObject и если оно будет равно WAIT_OBJECT_0, то тред завершен.

И с мьютексами, семафорами, эвентами, хендлами процессов принцип тот же. Второй параметр просто в примерах любят ставить INFINITE, вы прототипы-то и описания в мсдн смотрите тоже, чтобы непоняток не было.

вот пример


VOID StartRoutine(VOID)
{
int i;
for(i = 0;i<10;i++)
{
printf("I am in thread: count %d\n",i);

Sleep(100);
}
}


int _tmain(int argc, _TCHAR* argv[])
{

DWORD dwStatus,dwTid;

HANDLE hThread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)&StartRoutine,0,0,&dwTid);

do
{
dwStatus = WaitForSingleObject(hThread,0);

printf("Status = %X\n",dwStatus);

Sleep(100);

}while(dwStatus !=WAIT_OBJECT_0);

Sleep(-1);
return 0;
}


Как видите, WaitForSingleObject вызывается с тайм-аутом 0. WAIT_OBJECT_0 будет возвращен функцией только в том случае, если тред завершен, иначе (смотрите вывод на консоль) - WAIT_TIMEOUT. И, конечно же, заморозки проверяющего треда нет. Вот такие дела.

ToniKapuchon
12.03.2009, 15:56
рихтера читай! синхронизация потоков 10 глава вроде!

harizma_xaker
12.03.2009, 20:10
люди есть вопрос! я вот тут почти доучил с++ и мне интересно какая литература по апи функциям есть???
З.Ы.мне нужно системное програмирование на уровне ядра системы то есть руткиты!

ToniKapuchon
12.03.2009, 20:32
)))рихтера читай! - начало начал))

slesh
12.03.2009, 20:52
2 harizma_xaker
Ядро - это не API а NATIVE
Вообще все функции есть в DDK. Но многие недокументированны. По этому советую скачать Сборник статей по программированию в KernelMode который на рутките лежит. Вес 88 метров архивчек.
http://rootkits.ru/library/ShowLib.aspx?id_l=9

Petr
12.03.2009, 23:30
Возможно ли сделать чтобы в форме запустились 6 цмд окон, и из формы не выходили. Типо рамки для 6 цмд

De-visible
13.03.2009, 02:16
О_о.... привет наркоманам... ыы(

slesh
13.03.2009, 12:44
как вариант чтото помутить с родителями окон, но сомневаюсь я чтото что поможет это. Единственное что и поможет более менее - это pipe на cmd с отображением в memo на твоей форме

harizma_xaker
13.03.2009, 19:48
slesh спс!

линк не пашет!

0x0c0de
13.03.2009, 22:18
slesh спс!

линк не пашет!

на форуме бы посмотрели ообсуждение)

http://rootkits.ru/viewtopic.php?id=43


-----------

http://rootkits.ru/files/krnl.7z.zip

cupper
13.03.2009, 23:30
нужно расчитать значение сигмоидальной функции, в результате ее вычисления нужно возвести exp в некоторую степень. В какой библиотеки и каким параметром указано значение экспаненты ?

jawbreaker
13.03.2009, 23:45
Очевидно в math.h, тебе наверное нужна функция exp - http://www.cplusplus.com/reference/clibrary/cmath/exp.html

_nic
15.03.2009, 16:15
Это нормально что HKEY который прохавывает RegSetKeyValue невоспринимается DeleteKey?

0x0c0de
15.03.2009, 18:08
_nic, вы вот код не приводите и приходиться заниматься построением гипотез.

Вероятно, есть подключи

http://msdn.microsoft.com/en-us/library/ms724235(VS.85).aspx

вот тут "Deleting a Key with Subkeys"

И еще в качестве второго параметра RegDeleteKey у вас что?

Впредь, задавайте вопросы корректно. Давайте максимум информации (что вернула GetLastError - в данном случае regdeletekey сама возвращает код ошибки- и приводите кусок бажного кода обязательно). Время и свое сэкономите и тех, кто отвечает.

Grema
17.03.2009, 00:46
Люди нужна помощь в познании си++
в общем надо просто прочитать с файла информацию
in.txt

3
4
3 4 22 3
55 2

1 и 2 строку в отдельные переменные, а 3 и 4 в массивы
понятно что через fopen, но интересно посмотреть реализацию знающих людей)
заранее спасибо за помощь!

slesh
17.03.2009, 10:28
массив можно 2-мя путями прочитать - стением каждого числа по отдельности. Но нужно знать кол-во этих чисел в строке.
Или как вариант для универсальности - считать строчку сразу, посчитать кол-во пробелов в ней, к этому числу прибавить 1 и выделить памяти на массив.
А затем отпарсить строчку в массив, считая пробел разделителем

Grema
17.03.2009, 14:41
спасибо за разьяснение, если не сложно, было бы неплохо взглянуть на реализацию 2го варианта) спс.

imajo.ati
17.03.2009, 18:58
где взять neutrino.h и syspage.h ?
в системе нет таких. может быть есть сайт где они все выставлены?

n4e/\@
17.03.2009, 19:15
http://www.koders.com/c/fidB9F150A762CC2DD29EE7919180BC9FD3A23F14B6.aspx neutrino.h
http://www.koders.com/c/fid8358251B2DA735B49498AC460605F28FD9F50789.aspx?s =syspage.h#L21 syspage.h
Они?
Ссылки почемму то не вставлялись.

h01der
17.03.2009, 19:20
syspage.h (http://www.jbox.dk/sanos/source/include/os/syspage.h.html)
И вот еще инфа по данному вопросу
The Neutrino Microkernel (http://microkernel.narod.ru/files/QNX/QNX_neu1.html)

awdrg
17.03.2009, 23:27
Подскажите пожалуйста: как отправить простейший запрос на сервер и получить ответ, и вывести его. Почитал про сокеты (*nix), начал писать консольную программу, остановился почти в начале :-/
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
using namespace std;
main()
{
int a = socket(adress,data_type,protocol);
cout << a;
return 0;
}
В мануале написано, что все три входных значения должны иметь тип int. Как я понял прямой адрес не подходит, его нужно через что то перегнать для получения идентефикатора(?). Такая же ситуация и с форматом отправки данных и протоколом? Если можно покажите на примере самый простой запрос с отправкой запроса и получением ответа, и обьясните в чем ошибки моего хода мыслей. спасибо =)

St0nX
17.03.2009, 23:41
http://www.citforum.ru/book/cook/winsock.shtml
В линухе работа с сокетами не на много отличается.

В send() шлеш запрос в recv() принимаеш ответ на него портатипы функций посмотри в гугле или в ссылке выше.

imajo.ati
17.03.2009, 23:52
Подскажите пожалуйста: как отправить простейший запрос на сервер и получить ответ, и вывести его.

В мануале написано, что все три входных значения должны иметь тип int. Как я понял прямой адрес не подходит, его нужно через что то перегнать для получения идентефикатора(?). Такая же ситуация и с форматом отправки данных и протоколом? Если можно покажите на примере самый простой запрос с отправкой запроса и получением ответа, и обьясните в чем ошибки моего хода мыслей. спасибо =)

простейший пример под никс описан (к примеру) в книге Эффективное программирование TCP IP.

сейчас могу просто пересказать =\

все 3 входных значения задаются константами с типом int - а именно:
int s = socket( PF_INET, SOCK_STREAM, 0 );
PF_INET (или AF_INET) - адресной домен интернета.
SOCK_STREAM - указывает, что должен использоваться потоковый протокол (в данном случае TCP)
0 - т.к. протокол указан во 2м параметре 3-й почти всегда оставляют 0

ход мыслей не верен, потому что адрес задаётся при привязывании порта к сокету(или при подключении - если пишешь клиент), а не при его создании.

для создания прослушивающего сокета нужно 3 функции.
для создания соединения с удалённым хостом - 2.

прочитай книгу, в первой же главе описаны простейший клиент и сервер

verylagcomp
18.03.2009, 12:10
Доброго времени суток!
Пишу программку для проверки и отладки неполадок в сети на Builder C++. Столкнулся с тем, что не могу пустить tracerout и ping через прокси. Нужна помощь:)

St0nX
18.03.2009, 12:52
verylagcomp Покажи что уже наработал. Каким образом ты трасер пускаеш и пинг.

Kuzya
18.03.2009, 18:09
Зачем перед некоторыми типами писать "^"? например когда я пытаюсь определить переменную типа System::String то этот знак обязателен, иначе VC ругается.

ZipaCna
18.03.2009, 18:39
Зачем перед некоторыми типами писать "^"? например когда я пытаюсь определить переменную типа System::String то этот знак обязателен, иначе VC ругается.

String^

это что то типо упровляемой ссылки используемой в С++.Net. По симантике с C++ похожа на указатель.

^ - является ссылкой на объект .Net. Это надо для того чтоб сборщик мусора мог правильно все подчищать, если ты это не используешь то при создании обычных указателей ты должен заботиться об очистке сам.

awdrg
18.03.2009, 18:59
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?

ZEXEL
18.03.2009, 19:04
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?
rand() % 0 + 20
через функцию присваивай !

awdrg
18.03.2009, 19:36
Компилятор ругается что на 0 делить нельзя. Убрал % 0 и всевремя на выходе одно и то же восьмизначное число. wtf?

jawbreaker
18.03.2009, 19:40
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?
rand() % 21

awdrg
18.03.2009, 19:40
На выходе всегда единичка =)

jawbreaker
18.03.2009, 19:41
На выходе всегда единичка =)
Это потому что в начале нужно было написать srand(1000) (не обязательно 1000)

awdrg
18.03.2009, 19:45
при разных значениях srand() появляются разные значения выходной переменной, но при повторном запуске программы они идентичны. Также одинаковые данные при помещении этого кода в тело цикла.

awdrg
18.03.2009, 19:47
нашел решение:

#include <iostream>
using namespace std;
main()
{
int a = 0;
for (int i=0;i<10;i++)
{
srand(i);
a = rand() % 21;
cout << a << "\n";
}
return 0;
}

за помощь спасибо :)

awdrg
18.03.2009, 19:49
Только не совсем понятно: как при повторном запуске программы наблюдать другие числа?

FoX's
18.03.2009, 20:01
int i;
srand(time(0));
i=rand()%21 // 0-20
i=rand() // 0-0xfffffff


srand только 1 раз в начале

awdrg
18.03.2009, 20:07
i=rand(); ни к чему, все работает и так: =)

#include <iostream>
using namespace std;
main()
{
int a = 0;
srand(time(0));
for (int i=0;i<10;i++)
{
a=rand()%21;
cout<<a<<"\n";
}
return 0;
}

_nic
19.03.2009, 20:23
Вот нагуглил про AnsiString

Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;

Я правильно понимаю что место под переменную типа AnsiString поумолчанию выделяется в куче?Если я допустим сделаю структуру в которой все члены будут типа AnsiString место под неё автоматически в куче выделится?Или есть какие то дополнительные ньюансы?

Fl0dER
20.03.2009, 09:44
У меня вопрос , вот я не как не пойму .... Я с помощью sprintf формат текста делаю , для него обьявляю char buffer[512] ... Но как же мне узнать размер всего что я занес в buffer если я уже назначил 512 : ( пробывал char* data = buffer , и патом узнать размер ... Но не вышло :\ подскажи пожалуйста

FoX's
20.03.2009, 09:55
sprintf returns the number of bytes stored in buffer, not counting the terminating null character.
мсдн :-)

ToniKapuchon
20.03.2009, 12:00
У меня вопрос , вот я не как не пойму .... Я с помощью sprintf формат текста делаю , для него обьявляю char buffer[512] ... Но как же мне узнать размер всего что я занес в buffer если я уже назначил 512 : ( пробывал char* data = buffer , и патом узнать размер ... Но не вышло :\ подскажи пожалуйста
strlen(buffer)?

Glazz
20.03.2009, 16:29
А вот имеется строчка FD_ISSET(n->sock,fds);
на нее ругается так:
base operand of `->' has non-pointer type `_types_fd_set' .
В чем может быть проблема?
n - указатель на структуру, содержащуюю поле int sock.

Все, решил сам.

St0nX
21.03.2009, 20:18
FD_ISSET((*n).sock,fds);

попробуй сделать так. хоть это и тоже самое но может прокатит.

а вообще n точно указатель?

и вообще скинь портотип функции FD_ISSET() :) а лучше весь код

Glazz
21.03.2009, 21:25
FD_ISSET((*n).sock,fds);

попробуй сделать так. хоть это и тоже самое но может прокатит.

а вообще n точно указатель?

и вообще скинь портотип функции FD_ISSET() :) а лучше весь код
Читай. Я уже решил. Я в аргументах метода, где использую эту функцию указал fd_set &fds, а нужно было fd_set* fds. После этого все заработало.

St0nX
21.03.2009, 22:01
:) не заметил

VIP
22.03.2009, 22:08
Однажды я спрашивал здесь по поводу "защиты от дураков" в С, мне ответили, что там её нет как таковой. Но лабораторные мне писАть надо, так что пока у нас вводятся только числа я попробовал, сделать вот такую проверку:


# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define MAXLINE 1000

double protect_double(char str[]){ // функция "защита от дураков"
int i; // переменная-счётчик
double digit; // возвращаемое значение
char str_2[MAXLINE]; // временная строка
for(i=0; i<strlen(str); i++){ // цикл проверки каждого введённого символа
if ((str[i]>='0'&&str[i]<='9')||(str[i]=='.')){ // определение принадлежности символа к числу или .
str_2[i]=str[i]; // если это число, то записываем в переменную строку
}
else { // если это не число, то выдаём сообщение об ошибке
printf("Вы ввели некорректные данные! Пожалуйста введите число."); // сообщение
break; // прерываем выполнение функции
}
}
if(i==strlen(str)){ // если все введённые символы - числа, то преобразуем строку в число
digit=atof(str_2); // преобразуем...
}
return digit; // возвращаем число
}

int main(void){
char s[MAXLINE]; // объявление вводимой строки
double a; // строка как число
printf("Введите пожалуйста число: \n"); // сообщение о вводе числа (на самом деле строки)
scanf("%s", &s); // сканируем вводимую строку
a=protect_double(s); // отправляем строку на проверку
printf("%f+1=%f\n", a, a+1); // выводим результат сложения, чтобы убедиться, что получили число
return 0; // завершение программы
}


всё бы ничего, но вот возникла проблема, которую я не знаю как решить:

функция protect_double должна возвращать занчение типа double, но какое значение она должна возвращать, если она завершилась, но не преобразовала строку (т.е. ввели не число)?

Как я понимаю, нужно в ней вместо break написать return <что-то>, что означало бы, что в строке не число, но ведь это <что-то> должно быть double. а как тогда в main отличить double, который с ошибкой от double, который ввели?

St0nX
22.03.2009, 22:58
Как вариант. Если ничего не хочеш менять в своей программе то можно создать для таких целей структуру вот:
struct a
{
int val1;
int flag;
};

возвращай ее значения записывай в вал а то что ты определил записывай в флаг. Потом все проверяеш если флаг 1 то число если нет то гриш типо введите число.

или введи глобальную переменную.

Ra$cal
23.03.2009, 20:44
вообще правильно делать по другому

bool protect_double(char* s, double& dbl_val);

вот так описываешь функцию. в ней проводишь преобразование. если в строке не дабл число, ты возвращаешь false. иначе true и в переменную dbl_val пишешь полученное число.

horlyk
23.03.2009, 23:07
Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?

ToniKapuchon
24.03.2009, 00:42
Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?

Директивы Препроцессора

Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.

Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:

#include "имя файла" #include <имя файла> Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом. Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.

Директива #include может быть вложенной, т.е. во включаемом файле тоже может содержаться директива #include, которая замещается после включения файла, содержащего эту директиву.

Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на СИ начинаются с этой директивы.

источник (http://www.languagec.info/include.php)

Roston
24.03.2009, 12:22
мож не оч по теме, но всё же трабла с устоновкой визуал студио на ноуте.... вот на компе поставил всё ок, а но ноуте всё время такая хрень
http://pic.ipicture.ru/uploads/080831/VveWmCRQVB.jpg
помагайте плз

verylagcomp
25.03.2009, 10:19
пишу на С++ Builder. Программа должна пинговать разные адреса, а также делать преобразование из числового адреса в буквенный и обратно. Командной строкой пользоваться нельзя (так бы,конечно,использовал nslookup или tracert). Как мне это получить?
Для пинга использовал IdIcmpClient, но вроде у него нет таких методов и свойств для связи dns...подскажите,пожалуйста :confused:

Glazz
25.03.2009, 12:37
В юниксе(пишу под cygwin) есть функции для работы с .ini?

Решил использовать обычный вариант параметр:значение и fscanf();

scrat
25.03.2009, 19:59
В юниксе(пишу под cygwin) есть функции для работы с .ini?

Решил использовать обычный вариант параметр:значение и fscanf();
научитесь блять гуглить уже (http://www.opennet.ru/prog/info/3215.shtml)

K.V.
25.03.2009, 20:00
to Roston
У меня тоже студия как-то раз не хотела ставиться, но после переустановки винды, установилась нормально. Но это наверное слишком радикальный метод, может ещё кто что подскажет. :)
to verylagcomp
А почему командной строкой пользоваться нельзя?
А то есть прикольная функция WinExec(), которая выполняет команды DOS, через неё и пинговать можно.

.Slip
25.03.2009, 20:31
научитесь блять гуглить уже (http://www.opennet.ru/prog/info/3215.shtml)
+b

s_p_a_m
25.03.2009, 20:41
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.

geforse
26.03.2009, 09:10
Есть класс A и класс B(причем классов может быть неограниченное кол-во).
В контроллер приходит имя из InputBox'a - "A".
Мне требуется создать экземпляр класса по его имени(без if и switch).

Это реально как-то организовать в рантайме? Если да, то как?

Хотя бы алгоритм

Forcer
26.03.2009, 10:08
Есть класс A и класс B(причем классов может быть неограниченное кол-во).
В контроллер приходит имя из InputBox'a - "A".
Мне требуется создать экземпляр класса по его имени(без if и switch).

Это реально как-то организовать в рантайме? Если да, то как?

Хотя бы алгоритм
В Java и C# это реализовано на уровне самого языка и называется Reflection. В С++ такого нет, но, возможно, есть какие-нибудь способы это все-таки осуществить. Могу посоветовать погуглить на тему "c++ reflection". Вот что сам нашел по теме(но не вчитывался, не анализировал, сам не использовал):

/wiki/Reflection_(computer_science) (http://en.wikipedia.org/wiki/Reflection_(computer_science))

MSDN#Reflection in C++ (http://msdn.microsoft.com/en-us/library/y0114hz2(VS.80).aspx)

xismyname
26.03.2009, 14:50
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.
блин, че за тупые вопросы....

Учи сокеты.

s_p_a_m
26.03.2009, 20:51
блин, че за тупые вопросы....

Учи сокеты.
че за тупые ответы? я не спрашивал что мне учить, я просил пример!

awdrg
26.03.2009, 21:01
буду тоже благодарен за простейший пример использования сокетов на c++ (консоль :D)

Martyr
26.03.2009, 21:04
_http://curlpp.org/-Библиотека для работы
_http://curlpp.org/index.php/examples/66-example-16-Простой хттп пример
_http://www.zedwood.com/article/113/cpp-winsock-basic-http-connection- простой пример на винапи
_http://cs.baylor.edu/~donahoo/practical/CSockets/WindowsSockets.pdf-тоже инфа по сокетам
Еще ,если хотите хорошенько разобраться в протоколе - курите RFC.
_http://tools.ietf.org/html/rfc1945

KaZ@NoVa
26.03.2009, 21:24
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.
Щас попробую что-нибудь написать :3
И, да, ты знаешь, как работает протокол хттп ?
И, еще вопрос: для каких это целей ? ибо если не по учебе, то ява в этом смысле удобнее )))

s_p_a_m
26.03.2009, 21:45
да, если можно то рабочий код на примере какогонить сайта :) желательно хотябы с минимумом коментариев, буду благодарен, с меня +++ ))

Chaak
26.03.2009, 22:35
C++!!!! Казанова, ты идиот честное слово =\

ToniKapuchon
26.03.2009, 22:37
надеюсь, фраза про влогинение на сайте "вконтакте" не было принято тобой за стёб )
у меня тут просто с компилятором глюки... раньше под юникс-подобными писал, там был socket.h, а под виндой нету (((

а вот пример на js для авторизации вконтакт и спама на стену

for (var i =0; i<10000; i++)
{
var http = WScript.CreateObject("Microsoft.XmlHttp");
wall_hash="89fbf0039fb2a1f0d9eaa5f973830671" ;
var mid ="232105309994";
var pass="";
var mail="";

http.open("POST","http://vkontakte.ru/login.php?email="+mail+"&pass="+pass,"FALSE");
http.send("");
if(http.readyState==4)
{


http.open("POST", "http://vkontakte.ru/wall.php?act=get10&wall_hash="+wall_hash+"&wpage=100000&seed=spam&page=1&mid="+mid+"&n=3","FALSE");

http.send("");

}
WScript.sleep(1500);
}
Прикольный ответ в теме "[c/c++] Новичкам: задаем вопросы"
))
По теме:
http://forum.ru-board.com/topic.cgi?forum=33&topic=0824
http://forum.xakep.ru/m_1239888/tm.htm
https://forum.antichat.ru/nextnewesttothread20977.html

Chaak
26.03.2009, 22:38
>_< пиздец простите :D

Glazz
27.03.2009, 20:30
Нужно работать с MySQL.
Использую Dev-Cpp настроенный под cygwin.
C++
Скачал MySQL 5.0 , взял заголовочные файлы и .lib оттуда.
Все вроде подключил правильно.
libmysql.lib в параметры проекта - компоновщик.
заголовочные по обычному.

При вызове того же mysql_init(NULL); вылазит

[Linker error] undefined reference to `_mysql_init'

Весь день сижу и курю , из за чего может быть. Библиотека 99% уверен, что подключилась.

Martyr
27.03.2009, 23:19
Сначала скачай вот это:
_ http://www.emmestech.com/software/pexports-0.43/download_pexports.html
и установи...
Далее выполни pexports libmysql.dll > libmysql.def.
Вместе с dev cpp идет dlltool,выполни комманду :
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
дальше создавай проэкт ,добавь опцию:
project menu->project options->parameters->linker-> add -lmysql
Компилируй...
И во время компиляции появится ошибка
a unrecognized ... mysql_init@4
Поэтому открой файл libmysql.def и в нем замени mysql_init на mysql_init@4.Сохрани файл.Запусти снова дллтоол и попытайся скомпилировать...

Glazz
28.03.2009, 08:59
Спасибо огромное!!! все норм компилится без послднего этапа.
Есть еще одна проблема:
я когда запускаю программу, она ругается на то, что не может найти библиотеку.
Говорит Приложению ... поскольку c:c++libmysql.dll не был найден ... . Я не могу понять, проект и сам .exe лежит в c:\c++\mysql\ , библиотека с ним же там же. Почему вот он не пишит путь правильно, слешей нету.

groundhog
28.03.2009, 15:31
Если ты запускаешь проект под какой-то средой, то не факт, что текущая директория устанавливается на ту же директорию где лежит exe файл. Попробуй положи libmysql.dll в папку с exe и запусти с оболочки. Если не поможет кинь в Windows или Windows\System32.

Glazz
28.03.2009, 15:53
я просто запускаю .ехе. Без среды и т.д. . Библиотека лежит и в windows\.. и в одной папке с .ехе

groundhog
28.03.2009, 16:06
Glazz, значит либо у тебя лежит кривая либа, либо она почему-то требует каких-то зависимостей (я такого не встречал), либо эта клиентская библиотека не той версии... Где ты её брал? В дистрибутиве mysql?

Glazz
28.03.2009, 16:49
Да. Меня настораживает то, что он неправильно пишет адрес до библиотеки. Я подключал адрессом до библиотеки, он пишет там адресс до файла без слэша, если пишу -lmysql , он пишет, что не может покдлючить её. linker input file unused because linking not done
Если при компиляции ложить библиотеку в другую папку, то он пишет - не могу найти -libmysql.dll . Почему сначала минус идет. О если библиотеку называю "-libmysql.dll" то он её находит.

agrofyl2
29.03.2009, 15:46
Здраствуйте.
Я новичек в С++, помогите плиз:
Как рисовать в C++ (Windows XP, Visual Studio 2008 Express)?
Нашел пример

#using <system.drawing.dll>
using namespace System;
using namespace System::Drawing;
// ...
protected:
Void Form1::OnPaint(PaintEventArgs^ pe )
{
Graphics^ g = pe->Graphics;
g->Clear(Color::AntiqueWhite);

Rectangle rect = Form::ClientRectangle;
Rectangle smallRect;
smallRect.X = rect.X + rect.Width / 4;
smallRect.Y = rect.Y + rect.Height / 4;
smallRect.Width = rect.Width / 2;
smallRect.Height = rect.Height / 2;

Pen^ redPen = gcnew Pen(Color::Red);
redPen->Width = 4;
g->DrawLine(redPen, 0, 0, rect.Width, rect.Height);

Pen^ bluePen = gcnew Pen(Color::Blue);
bluePen->Width = 10;
g->DrawArc( bluePen, smallRect, 90, 270 );
}



Но приложение, допустим, Win32, и там нет PaintEventArgs.
Подскажите как рисовать просто в окне(как я понял от PaintEventArgs берется только дескриптор окна и RECT (эт я сам смогу)).

KaZ@NoVa
29.03.2009, 21:00
agrofyl2
Долго так объяснять. Там очень много функций. Чтобы написать все понадобится штук 20 сообщений. Если хочешь-дай свою почту- я отправлю doc файл, который я сам состовлял изучая windows.h. Там все очень наглядно и полно примеров! Но, в двух словах, это делается так:
Создается пустое окно (это шаблон):

#include <windows.h> // Объявление функции окна (оконной процедуры) LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE hInst; // Идентификатор приложения // Указатель на константную строку символов - имя программы и класса окна LPCSTR AppName = "MyProgramm"; // Точка входа в программу - функция WinMain int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; // Уникальный идентификатор окна (handle) MSG msg; // Объявление структуры типа MSG, для работы с сообщениями hInst = hInstance; // Сохраняем идентификатор приложения // Заполняем структуру WNDCLASS WNDCLASS wc; // Инициализируем выделенную для структуры память нулями ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.hInstance = hInst; wc.hIcon = LoadIcon(hInst, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = AppName; RegisterClass(&wc); // Создаем и регистрируем оконный класс // Создаем окно программы hWnd = CreateWindow( AppName, // Имя класса окна AppName, // Заголовок окна WS_OVERLAPPEDWINDOW, // Стиль окна CW_USEDEFAULT, 0, // Горизонтальная и вертикальная позиции окна 300, 300, // Ширина и высота окна NULL, // Хендл родительского окна NULL, // Хендл меню hInst, // Идентификатор приложения NULL); // Дополнительные данные окна ShowWindow(hWnd, SW_SHOW); // Отображаем окно UpdateWindow(hWnd); // Перерисовываем окно // Стандартный цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Оконная процедура LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}

return 0;
}

Окно создали, теперь как в нем рисовать:
Рисуем либо в case WM_PAINT, а именно:
HDC hdc; RECT rect; PAINTSTRUCT ps;//-глобальные переменные case WM_PAINT: hdc = BeginPaint(hWnd, &ps); RECT rt; GetClientRect(hWnd, &rect); DrawText(hdc, "Привет вот так", -1, &rect,DT_SINGLELINE ); EndPaint(hWnd, &ps); break; (он должен быть там же, где и case WM_DESTROY: PostQuitMessage(0); break;) и там где: DrawText(hdc, "Привет", -1, &rect,DT_SINGLELINE ); мы пишем все для рисования, либо мы можем рисовать где угодно, но тогда надо написать строку hDC=GetDC(hWnd);НО! Не забываем удалять все объекты DeleteObject(hDC); А рисуем мы так: PatBlt(hDC,0,0,2000,1000,PATCOPY); -прямоугольник MoveToEx(hDC,10,20,NULL);LineTo(hDC,100 ,100);-линия ExtTextOut(hDC,10,10,NULL,NULL,"привет мир",9,NULL);-текст Ellipse(hDC,int x,int y,int z,int k);-эллипс

и тд.
Давай все таки отошлю.

kriPer
30.03.2009, 01:19
я ща c++ учу не кто не сможет мне по асе отвечать на вопросы?

KaZ@NoVa
30.03.2009, 05:36
я ща c++ учу не кто не сможет мне по асе отвечать на вопросы?
_SEREGA_ Да)

kriPer С удовольствием..Ток как зделаешь обещенное мне) ;) :rolleyes:

Glazz
30.03.2009, 10:36
Что-то не то с MYSQL библиотекой.
Делаю допустим такой код :
MYSQL *con;
con = mysql_init(NULL);
mysql_real_connect(con,"localhost","root","pass","test",3306,NULL,0);
for(int i = 0; i < 101; ++i) {
mysql_query(con,"...");
cout<<i<<endl;
}

Цикл работает 3-4 раза , ну вообще примерно так выглядет счет:
1
2
3
465874563

Если я уберу mysql_query(); то счет идет норм. Это мускль запрос кидается на ячейку с памятью под int i ? в запросе обычная вставка в бд.

KaZ@NoVa
30.03.2009, 10:53
лучше каждый раз вставляй новую строку и сразу выводи счётчик на экран - так виднее будет в чём беда.
а вообще как я понял con - это база данных.
а нам нужно ещё таблицу выбрать(или создать) и уже в неё вставлять.
а то получается что мы прямо в базу суём

Glazz
30.03.2009, 11:04
лучше каждый раз вставляй новую строку и сразу выводи счётчик на экран - так виднее будет в чём беда.
а вообще как я понял con - это база данных.
а нам нужно ещё таблицу выбрать(или создать) и уже в неё вставлять.
а то получается что мы прямо в базу суём
Имеете ввиду делать сразу после вызова
MYSQL_RES res = mysql_store_result(con); ? - не помогло
Ну если бы я делал выборку, то да. Хотя попробую.
Ну int i изменяется после вызова запроса это 99% уверен( ну до вызова норм, после уже хз какое значение).
а con , это указатель на дескриптор , для работы с БД. Таблицу я указываю в mysql_real_connect(...'tested'..);

xismyname
30.03.2009, 15:30
буду тоже благодарен за простейший пример использования сокетов на c++ (консоль :D)

TCP Клиент/Сервер сокеты, язык C.
ТУТ (http://gulam.ucoz.ru)

KaZ@NoVa
30.03.2009, 16:51
Имеете ввиду делать сразу после вызова
MYSQL_RES res = mysql_store_result(con); ? - не помогло
Ну если бы я делал выборку, то да. Хотя попробую.
Ну int i изменяется после вызова запроса это 99% уверен( ну до вызова норм, после уже хз какое значение).
а con , это указатель на дескриптор , для работы с БД. Таблицу я указываю в mysql_real_connect(...'tested'..);
всё равно нужно в запросе указывать имя таблицы.
просто если добавляется успешно, то "и" увеличится 100%.

kriPer
30.03.2009, 17:49
тоолько начал пишу #include <lostream.h>

int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня

razb
30.03.2009, 17:56
не lostream.h а iostream.h
и не count a cout
А вообще читай книжки до конца и повнимательнее

kriPer
30.03.2009, 17:58
спс а остальные ошибки

kriPer
30.03.2009, 17:59
1.cpp|5|error: `count' was not declared in this scope|
вот ща че пишет

sebay
30.03.2009, 18:09
подскажите что такое srand(time(NULL)) и зачем оно нужно.

razb
30.03.2009, 18:13
установка максимального значения диапазона случайных чисел

sebay
30.03.2009, 18:28
а какие могут быть значения?как его вообще задавать?

criz
30.03.2009, 18:36
sebay, любое unsigned-число.

kriPer
30.03.2009, 18:38
мне кто нить поможет?

Amoura
30.03.2009, 18:44
тоолько начал пишу #include <lostream.h>

int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня


перед cout поставь std::cout

blood150
30.03.2009, 19:01
Ребята я уверен вы знаете: охото сделать батник который отключает диспетчер задач. Подскажите пожалуйсто.

Chaak
30.03.2009, 19:09
тоолько начал пишу #include <lostream.h>

int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня
#include <iostream.h>

using namespace std;

int main()
{
cout<<"Hello world"<<endl;
return 0;
}
Внимательнее читай код

подскажите что такое srand(time(NULL)) и зачем оно нужно.
Привязка генератора случайных чисел ко времени. В качестве параметров лучше указывать любое long число.

MaTpOc
30.03.2009, 19:18
Ребята я уверен вы знаете: охото сделать батник который отключает диспетчер задач. Подскажите пожалуйсто.

Чтобы запретить пользователю возможность запуска Диспетчера задач Windows, установите значение параметра типа DWORD DisableTaskMgr в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System равным 1

blood150
30.03.2009, 19:38
Чтобы запретить пользователю возможность запуска Диспетчера задач Windows, установите значение параметра типа DWORD DisableTaskMgr в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System равным 1

ну эту штуку я видел нет мне надо сделать штото чтоб чел которому дам это штото нажал на файлик и у него в тихоря отключился диспетчер задач. Ну мне это чтоб он не видел что радмин запущен.

KaZ@NoVa
30.03.2009, 19:38
тоолько начал пишу #include <lostream.h>

int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня

Правильно так:

#include <iostream.h>
int main()
{
std::cout << "Fuck You, World!\n";
return 0;
}

centnew
31.03.2009, 00:08
kriPer вроде юзает visual studio а там нада ещё сделать такое
using namespace std;

kriPer
31.03.2009, 00:19
а как можно в с++ писать на руском

Forcer
31.03.2009, 01:35
а как можно в с++ писать на руском
setlocale (LC_ALL,"rus");
лежит в <iostream>

Правильно так:
Неправильно так. В iostream.h нету пространства имён std. Оно есть в библиотеке <iostream>, которую и нужно использовать, так как iostream.h deprecated.

kriPer вроде юзает visual studio а там нада ещё сделать такое
using namespace std;
Не нада. Использование глобальных неймспейсов - плохой стиль.

Roston
31.03.2009, 11:54
а как можно в с++ писать на руском
если ты в визуал студио то просто измени шрифт на Terminal

и вот воопшим почитай=)
_http://www.rsdn.ru/article/qna/ui/concp.xml

nerezus
31.03.2009, 14:05
system("chcp 1251"); напиши перед началом вывода.
В архитектуры винды баг: она использует 3 кодировки. А такое поведение - следствие бага.

razb
31.03.2009, 14:22
system("chcp 1251"); напиши перед началом вывода.
Не хорошо использовать ф-цию system(), ее вообще надо избегать.
Сделай как предложил Forcer используй setlocale();

nerezus
31.03.2009, 14:42
ее вообще надо избегать. Согласен, но нет смысла для такой задачи юзать пайпы, т.к. это не даст преимуществ.

kriPer
31.03.2009, 18:40
я как понял visual c++ 2008 компилировать не умеет а сохранять и потом компилировать не очень удобно может еще подсказать нормальный на счет турбо с++ он немного не удобный))

centnew
31.03.2009, 19:37
kriPer
я как понял visual c++ 2008 компилировать не умеет
Всё там компилируется, моё мнение такое, изучать си в visual studio неблагодарное дело, ты что хочешь знать студию или C++ ?
на счет турбо с++ он немного не удобный))
чем тебе турбо си не понравился? :)
В принципе тебе нужно научиться сначала создавать проекты.
Кстате никто не вкурсе, если посоветовать новечку настроить какой нибудь редактор кода, под коомпилятор TC, из этого выёдет чтонибудь хорошее?
Не буду врать сам этого не делал, но на визуале сидел не долго.

nerezus
01.04.2009, 14:01
моё мнение такое, изучать си в visual studio неблагодарное дело, ты что хочешь знать студию или C++ ? Не надо сваливать свои ошибки на среду.
Особенно на мейнстрим.
Любой нормальный C++ код в ней нормально соберется.

centnew
01.04.2009, 14:23
Не надо сваливать свои ошибки на среду. Особенно на мейнстрим. Любой нормальный C++ код в ней нормально соберется.
А кто сказал или с чего это ты так подумал, что я вообще сваливаю ошибки да ещё и свои?
Я например досих пор низнаю что такое мейнстрим. Это что в синтаксисе си присутствует? nerezus Раскажите поподробнее пажалуйста об этой очень интересно штуке, а то мы тут только начинающие!

razb
01.04.2009, 14:47
чем тебе турбо си не понравился?
В принципе тебе нужно научиться сначала создавать проекты.
Кстате никто не вкурсе, если посоветовать новечку настроить какой нибудь редактор кода, под коомпилятор TC, из этого выёдет чтонибудь хорошее?
Не буду врать сам этого не делал, но на визуале сидел не долго.
vim + gcc будет очень хорошим началом)

nerezus
01.04.2009, 14:49
Я например досих пор низнаю что такое мейнстрим. Это что в синтаксисе си присутствует? nerezus Раскажите поподробнее пажалуйста об этой очень интересно штуке, а то мы тут только начинающие! http://en.wikipedia.org/wiki/Mainstream

Balvan
01.04.2009, 23:14
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?

KaZ@NoVa
02.04.2009, 00:24
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?
md5 - хешь файла через php
md5_file ( string $filename [, bool $raw_output ] )

а вот сорсов архиватора нет ((
может обычными файлообработчиками... ну там считать файл подсчитать его length
поделить на 5
регэкспом порезать
забить в разные переменные или файлы

а обратно... нужно запомнить очередность нарезки
создать новый файл и туда записывать 1й кусок в конец строки 2й ... и тд ))

Forcer
02.04.2009, 00:26
И как получать MD5-хеши файлов?
Вероятнее всего для этого нужна какая-то библиотека )).

http://www.cryptopp.com/

razb
02.04.2009, 13:59
Вероятнее всего для этого нужна какая-то библиотека )).
либса libssl
доки тут http://www.openssl.org/docs
может у кого сорцы винрара завалялись?!
Врядли гдето ты их найдешь, прога то проприетарная
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов")
Читаешь главный файл в битовом режиме и поблочно пишешь в другой файл(часть главного файла) в начале которого можно ставить какую нибуть метку которая показывала б какой по очереди этот файл является.

Forcer
02.04.2009, 22:55
razb
Если ты не заметил, то я не спрашивал, а отвечал.

p.s. метки в самих файлах ставить совсем не обязательно.

KaZ@NoVa
02.04.2009, 23:30
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?
Пусть число частей равно Н.
Тогда надо узнать размер файла и размер файла разделить на Н.
Вот и все!

Почитай здесь, может поможет:
http://r3al.ru/index.php?showtopic=76

razb
03.04.2009, 13:21
Если ты не заметил, то я не спрашивал, а отвечал.
Вероятнее всего для этого нужна какая-то библиотека )).
Очень информативный ответ. Я просто уточнил какая либса нужна)
p.s. метки в самих файлах ставить совсем не обязательно.
И как же ты собираешься определять где какая часть файла? телепатически?

_nic
03.04.2009, 22:39
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?

0x0c0de
03.04.2009, 23:18
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?


В случае успеха - ERROR_SUCCESS (0), в остальных случаях ошибка. Какая именно можно узнать, заюзав функцию FormatMessage.

KaZ@NoVa
04.04.2009, 18:05
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?
"При ошибке, возвращаемое значение – это код ошибки, объявленный в WINERROR.H.".....

awdrg
06.04.2009, 21:45
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.

.ATK
06.04.2009, 22:01
Рихтер, тебе в помощь... там целая глава, по поводу твоего вопроса!!

_nic
06.04.2009, 22:04
Подскажите где тут ошибка

HANDLE hh;
hh=HeapCreate(0,0x01000,(1024*1024)*50);
if(hh==NULL){MessageBox(0,"!","!",MB_OK);}
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
if(buf==NULL){MessageBox(0,"!","!",MB_OK);}//вовращяет NULL :(
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,&buf);
HeapDestroy(hh);

ЗЫ:GetLastError возвращяет 0 :confused:

awdrg
06.04.2009, 22:18
еще такой вопрос по памяти: хочу сделать обработку исключений следующим способом:
#include <iostream>
using namespace std;

main()
{
char * a;
for (int x = 0; x<1000; x++)
{
a = new char[10000000];
if (a == NULL)
{
cout << "Error allocating memory\n";
return 0;
}
else
{
cout << x << ")" << "memory allocated successfully\n";
}
}
return 0;
}
но при превышении лимита выделяемой памяти пишет в консоли не мое сообщение а вот что:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted

запускал в bash'e никсов. Как я понимаю это ограничение на уровне самой ОС и его нельзя обойти? :-/

criz
06.04.2009, 22:31
Подскажите где тут ошибка

может дело в
If the heap specified by the hHeap parameter is a "non-growable" heap, dwBytes must be less than 0x7FFF8.
это для HeapAlloc

criz
06.04.2009, 22:41
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted


это вроде сообщение о переполнении стека...
и где, собсна, перехват(try/catch)? :)

awdrg
06.04.2009, 22:53
в учебнике написано, что если оператор NEW не может присвоить адрес для памяти массиву то он помещает в него значение NULL. Ну в моем коде я сверял его и использовал ветвление :) По идее, все должно работать. Но не работает.

Chaak
06.04.2009, 23:44
awdrg, переполнение стэка, юзай оператор static

razb
07.04.2009, 01:31
2awdrg при переполнении оператор new выкидует исключение bad_alloc, вот его и отлавлюй

awdrg
07.04.2009, 16:25
Спасибо за советы, нашел мануал на эту тему (кому будет интересно)
http://users.msu.dubna.ru/~ovg/c++course/p2-3.html

pira
07.04.2009, 20:29
Помогите упростить исходник пожалуйста. Программка у меня работает, но написано по-нубовски. :)
Можно же что-то из этого переписать на function

unit auth;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, ExtCtrls, RXShell, RXClock, ComCtrls;

type
TForm5 = class(TForm)
http1: TIdHTTP;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
RxTrayIcon1: TRxTrayIcon;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RxTrayIcon1DblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
procedure OnMinimize(Sender: TObject);
{ Public declarations }
end;

var
Form5: TForm5;

implementation

{$R *.dfm}
// Сворачивание в трей.
procedure TForm5.FormCreate(Sender: TObject);
begin
Application.onMinimize:=OnMinimize;
end;

procedure TForm5.OnMinimize(Sender: TObject);
begin
RxTrayIcon1.Show; //Показываем иконку в трее
ShowWindow(Application.Handle,SW_HIDE); //Скрываем окно приложения
end;

procedure TForm5.RxTrayIcon1DblClick(Sender: TObject);
begin
Application.Restore; //Восстанавливаем окно
SetForeGroundWindow(Application.MainForm.Handle); //Активизируем окно
RxTrayIcon1.Hide; //Прячем иконку из трея
end;

// Запуск висения.
procedure TForm5.Timer1Timer(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
responseres.Text:=http1.Post('http://www.dmbchat.ru/refresh.php?say=aoaiaa&addr=Aey',params);
if Pos('refresh.php',responseres.Text)>0 then Memo1.Lines.Add('Вы успешно написали фразу.')
else Memo1.Lines.Add('Вы не в чате. Перезаходим.');
while Pos('refresh.php',responseres.Text)<=0 do begin
Button1.Click;
Exit;
end;
finally
params.free;
responseres.free;
end;
end;

// Вход в чат.
procedure TForm5.Button1Click(Sender: TObject);
var params,responseres:tstringlist;
Login, Password: string;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
Login:= Edit1.Text;
Password:= Edit2.Text;
params.Add('login='+Login);
params.Add('password='+Password);
responseres.Text:=http1.Post('http://www.dmbchat.ru/login.php',params);
if Pos('refresh.php',responseres.Text)>0 then
Memo1.Lines.Add('Вы успешно вошли в чат.')
else Memo1.Lines.Add('Ошибка! Вы не вошли в чат.');
finally
params.free;
responseres.free;
end;
while (Edit1.Text='') or (Edit2.Text='') or (Length(Edit1.Text) < 2) or (Length(Edit2.Text) < 5) do begin
ShowMessage (' Логин или Пароль введён неверно.');
Exit;
end;
Edit1.Enabled:=False;
Edit2.Enabled:=False;
Button2.Enabled:=True;
Timer1.Enabled:=True;
end;

// Выход из чата.
procedure TForm5.Button2Click(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('exit');
responseres.Text:=http1.Post('http://www.dmbchat.ru/logout.php',params);
finally
params.free;
responseres.free;
end;
Timer1.Enabled:=False;
Edit1.Enabled:=True;
Edit2.Enabled:=True;
Button2.Enabled:=False;
end;

end.

Chaak
07.04.2009, 20:31
это delphi а не c++

pira
07.04.2009, 20:47
это delphi а не c++

Так это общая ветка "С/С++, C#, Delphi, .NET, Asm".

ph1l1ster
07.04.2009, 20:50
Так это общая ветка "С/С++, C#, Delphi, .NET, Asm".

нет. читать умееш? [c/c++] Новичкам: задаем вопросы
http://forum.antichat.ru/thread39636.html

gyunter
08.04.2009, 18:17
Как можно в графическом режиме вевести некоторое числовое значение?
Пробовал функцию outtextxy как в паскале, но значение перменной с её помощью вывести не получается...

Заранее благодарю :)

Вот тут я пытаюсь вывести координаты на экран, чтобы получилось что-то вроде числовой линии.

for (dx=0;dx<=maxx;)
{
outtextxy(dx,y2-30,"здесь_надо_вывести_значени _dx");
dx=dx+40;
}

razb
08.04.2009, 18:25
char buffer[20];

sprintf(buffer, "%d", 12345);
outtextxy(x, y, buffer);

устроит?)

gyunter
08.04.2009, 18:36
razb, большое спасибо! Все заработало, как нужно :)

_nic
10.04.2009, 12:37
Вот такой код

hh=HeapCreate(0,0x01000,0);
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
buf+=1024*1024;
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,buf);

Тут конечно же на последней строке идет вылет в отладчик с матюком что в rtlfreeheap был передан кривой указатель на блок памяти.
А теперь такой вот код

hh=HeapCreate(0,0x01000,0);
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
buf+=1024*1024;
buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,buf);

В это случае вылетов нет.НО через диспетчер задач наблюдается утечка памяти.
Вопрос:как в таком случае надо правильно освобождать память?

razb
10.04.2009, 13:44
char *buf=(char*)HeapAlloc(hh,0,1024*1024);

buf=(char*)HeapAlloc(hh,0,1024*1024)
Ты два раза выделяешь память на один указатель в следствии этого первый блок памяти теряется.

_nic
10.04.2009, 13:55
Ты два раза выделяешь память на один указатель в следствии этого первый блок памяти теряется.
Читай внимательно, я немогу освободить 1й блок.

razb
10.04.2009, 14:18
Знач. используй два буфера. В переменную buf присваивается адрес начала выделенной памяти, а предыдущее значение теряется и его уже не вернуть поэтому и будет утечка памяти.

_nic
10.04.2009, 15:31
Знач. используй два буфера. В переменную buf присваивается адрес начала выделенной памяти, а предыдущее значение теряется и его уже не вернуть поэтому и будет утечка памяти.
Что значить используй два.Мне надо освободить область памяти после операции += .Если нечего по делу ответить то лутчше вообще молчать.

BlackSilver
10.04.2009, 15:39
или засунь buf-=1024*1024; перед освобождением или используй бва указателя на буфер. А так ты портишь указатель на буфер, ясен пень, что оно ругается.

_nic
10.04.2009, 16:06
или засунь buf-=1024*1024; перед освобождением или используй бва указателя на буфер. А так ты портишь указатель на буфер, ясен пень, что оно ругается.
А как продублировать указатель?И неподпортит ли это кучю?

criz
10.04.2009, 17:24
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!
без привилегий вроде только в 98ой получится выключить/перезагрузить :)

To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege.

criz
10.04.2009, 18:53
наверное много кода писать надо чтоб подянять привилигеии?!
не много :)

void enablepriv(int fEn)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEn ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, 0, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
}


Для работы с приводом копай в сторону mciSendString

KaZ@NoVa
10.04.2009, 20:05
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!
exitsystemex (ewx_shutdown,ewx_force); - вырубить
exitsystemex (ewx_reboot,ewx_force); - ребут

по-моему это не винапи а MMSystem.... сойдет?......

0x0c0de
10.04.2009, 20:49
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!


вот уже хз сколько постов написали ответов. а все потому, что никто не дал ссылки на первоисточник.

http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx

В эту тему заходишь и все время одни и те же вопросы в разных формулировках. когда уже люди осознают, что мсдн это круто

s_p_a_m
10.04.2009, 21:56
как отправить это на С++

http://forum.antichat.ru/search.php

Host: forum.antichat.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.8) Gecko/2009032609 MRA 5.4 (build 02647) Firefox/3.0.8 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://forum.antichat.ru/index.php?
Cookie: *****
Content-Type: application/x-www-form-urlencoded
Content-Length: 58


s=&do=process&sortby=lastpost&forumchoice=0&query=antichat

FoV
10.04.2009, 23:19
s_p_a_m
С помощью winsock.Читай (http://www.citforum.ru/book/cook/winsock.shtml)

s_p_a_m
10.04.2009, 23:25
s_p_a_m
С помощью winsock.Читай (http://www.citforum.ru/book/cook/winsock.shtml)

я пример просил а не ссылку где прочитать!!!! Читай внимательно пост!

FoV
10.04.2009, 23:27
s_p_a_m
А ты потрудись зайти по ссылке,там есть пример.

s_p_a_m
10.04.2009, 23:48
s_p_a_m
А ты потрудись зайти по ссылке,там есть пример.
блин не парь, прочитай пост стопиццот раз! пакет видиш? то что я просил видиш? нечего сказать - лучше не пиши вообще!

awdrg
11.04.2009, 21:21
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.

criz
11.04.2009, 21:30
блин не парь, прочитай пост стопиццот раз! пакет видиш? то что я просил видиш? нечего сказать - лучше не пиши вообще!
если перейти по ссылке, то можно увидеть пример :)
Посмотри пример "Пример реализации TCP-клиента". Пихаешь свой пакет в buff и отправляешь.
Вместо

fgets(&buff[0],sizeof(buff)-1,
stdin)

делаешь, например:

strcat(buff, "Host: forum.antichat.ru\r\n");
strcat(buff, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.8) Gecko/2009032609 MRA 5.4 (build 02647) Firefox/3.0.8 (.NET CLR 3.5.30729)
\r\n");
.... /* и так весь пакет */
send(my_sock,&buff[0],nsize,0);

0verbreaK
11.04.2009, 23:40
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.

Посмотри исходники утилит для работы с железом

Adeliae
12.04.2009, 01:36
Большая разница между физической памятью и памятью программ или ОС.
В венде виртуальная память со страничной подкачкой - читая физическую память ничего не поймешь, есть штатные механизмы обращения к памяти процессов - нужно получить привилегию отладки системных процессов, и затем открыть память нужного процесса - использую соответствующие API вызовы на каком языке напишешь программу - не важно.

Turbomax
12.04.2009, 11:56
Подскажи пожалуйста я только начал изучать C и у меня вопрос как скопировать папку
Например вот эту c:/1 сюда e:/1/
Какой оператор надо использовать ? А лучше напишите пример
Буду признателен

НА Turbo C

agrofyl2
12.04.2009, 12:10
KaZ@NoVa
Спасибо, я потыкался и разобрался :) (насчет рисования в окнах)

Glazz
12.04.2009, 15:01
если использовать GTK+ под WinXp, то у юзера должен стоять пакет GTK+ , или можно отделаться накидыванием библиотек в корень?

razb
12.04.2009, 16:36
если использовать GTK+ под WinXp, то у юзера должен стоять пакет GTK+ , или можно отделаться накидыванием библиотек в корень?
Накидать и подключить

al072
12.04.2009, 17:44
Всем доброго времени суток!Я с таким вопросом, уже на протяжении 2-х месяцев изучаю язык С++. Хочу начать писать программу удаленного администрирования именно на родном С++, без помощи платформы .net, сам код программы хочу построить на WinAPI(то, что он сложный я уже понял)!Посоветуйте с чего начать непосредственно разработку самого алгоритма программы?Может быть у кого-нибудь есть исходники подобного рода программ?

Adeliae
12.04.2009, 18:33
al072, определи какая функциональность тебе нужна от программы, если большая программа, с возможностью развития, то стоит сделать отдельно ядро и плагины, ядро (сервер) будет только принимать команды от клиента и загружать и устанавливать плагины и передавать команды от клиентов плагинам, а плагины сделать уже функциональными - файловый браузер, редактор реестра и тп.
Насколько я понимаю это легальная утилита, а не троян, поэтому ядро стоит сделать службой. сначала создавай службу (она же сервис) потом можно создать класс сокет, можно открыть порт на прием (определить разрешено-ли это брандмауэром и тп), можно обращаться к клиенту если у компа нет внешнего IP и тп. затем создать обработчик который будет разбирать команды, запускать поток исполнения (например загрузка и установка плагина) или передавать команды плагинам и отправлять ответы клиенту. Можно сделать и без плагинов - написать все вместе, что-то можно сделать в подключаемых библиотеках (dll в венде).
Это как я представляю - сам не писал таких утилит.
Главное сделай красивый удобный клиент иначе ни кто не будет пользоваться твоей утилитой.
PS надеюсь не трояна пишешь.

Turbomax
12.04.2009, 19:55
#include "stdio.h"
main()
{
char name[15];
int num;
num=1;

for(num=1;num<=9999;num++)
printf("%5d %5d \n " , num );
printf("Hello , enter you name " ) ;
scanf (" %s" , name ) ;
printf (" Hello %s \n ", name );
printf (" Enter you login ");
scanf ("%s" , name );
if(name=="max" )
printf ("Suceses");
else
printf ("Error" );


}

Кто скажет что не правильно ,нужно что бы при проверке логина она при вводе max писала усрешно а при вводе любого другого ошибку

razb
12.04.2009, 19:58
if(name=="max" )
Так строки не сравниваются, для этого есть ф-ция strcmp()

Turbomax
12.04.2009, 20:00
а мошь написать как это будет выглядеть в готовом виде а то я чет не догоняю

Все дошло пасиб

Irdis
12.04.2009, 20:11
BOOL strcmp(char* a, char* b, int n)
{
for (int i=0;i<n; i++)
if(a[i]!=b[i])
return false;
return true;
}
if (strcmp(name,"max",3))
{
//bla-bla-bla
}

razb
12.04.2009, 21:27
if (strcmp(name,"max",3))
в таком случае если строка равны твой код никогда не выполнится, правильно делать так:
if(!strcmp(string1, string2))
{
...
}

awdrg
12.04.2009, 21:46
подскажите пожалуйста нормальную среду разработки для win + C++
На начальных этапах Visual c++ будет нормальным?

Turbomax
12.04.2009, 21:51
Напишите пожалуйста как копировать файлы или папки в turbo c .Какие библиотеки нужно подключать а лучше сразу готовый исходник. Суть в том что прога при включении должна копировать папку e:/Downloads на флешку.Спасибо

Adeliae
13.04.2009, 03:43
awdrg, Visual C++ (в зависимости от версии) хватит на любом этапе, для создания небольших программ достаточно codeblocks:
http://www.codeblocks.org/downloads/5#windows
2-й содержит компилятор GCC (codeblocks поддерживает много компиляторов)

razb
13.04.2009, 12:57
Если что то простое то юзаю Notepad++ & mingw
Хотя в большинстве случаев пользуюсь Visual Studio

B@ton
13.04.2009, 19:50
Есть задача "Для данной буквы латинского алфавита нужно вывести справа стоящую букву на стандартной клавиатуре. При этом клавиатура замкнута, т.е. справа от буквы «p» стоит буква «a», от буквы «l» стоит буква «z», а от буквы «m» — буква «q». "
Есть ли алгоритм как просчитать такой вывод, или тупо нужно указывать соответствие букв?

razb
13.04.2009, 19:59
сделай массив с буквами кнопок например qwerty и тэдэ, и уже ищи в этом массиве нажатую кнопку и выводи правостоящий элемент

Mosvit
13.04.2009, 20:09
Кто-нибудь может объяснить что такое в языке С функция greb, а лучше дать исходник готовой программы использующий эту функцию.

Написать подпрограмму поиска, которую выполняет команда grep в файле с именем file:
grep [^0-9A-Za-z] file;

n4e/\@
13.04.2009, 20:10
Есть задача "Для данной буквы латинского алфавита нужно вывести справа стоящую букву на стандартной клавиатуре. При этом клавиатура замкнута, т.е. справа от буквы «p» стоит буква «a», от буквы «l» стоит буква «z», а от буквы «m» — буква «q». "
Есть ли алгоритм как просчитать такой вывод, или тупо нужно указывать соответствие букв?

#include <iostream>

int main ()
{
char mas[]={'q','w','e','r','t','y','u','i','o','p','a','s', 'd','f','g','h','j','k','l','z','x','c','v','b','n ','m'};
char a;
std::cin >> a;
if ( a=='m' ) std::cout << " " << mas[0];
else
for ( int i=0; i<25; i++ )
if ( a==mas[i] ) std::cout << " " << mas[i+1];
return 0;
}


Ну вот как то так.

B@ton
13.04.2009, 20:16
Спасибо!

Turbomax
13.04.2009, 22:01
А кто может сказать как сделать счто б прога с нетом общалась и ваще с какой версии turbo c это возможно

B@ton
14.04.2009, 10:00
Общение с нетом это браузер???turbo C это прошлое тысячилетие поставь хотябы DevC++.

ss88
14.04.2009, 13:19
помогите с такой вот штукой
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFF_SIZE 200
#define TABLE_SIZE 65535
typedef enum{INSERTED, NOT_INSERTED, COUNT_INCREMENTED} insertstatus_t;
typedef struct {
const char * word;
size_t count;
size_t hash;
} HASH_ITEM;
/* compare two HASH_ITEM's by words */
static int cmpitems(const void * p1, const void * p2){
return strcmp(((HASH_ITEM *)p1)->word, ((HASH_ITEM *)p2)->word);
}
/* sorting storage with qsort() function and refreshing HASH_INDEXes*/
void sort(size_t* hash_index,HASH_ITEM* hash_items,size_t items_count){

qsort(hash_items, items_count, sizeof(HASH_ITEM), cmpitems);

for(size_t i = 0; i < items_count; ++i)
hash_index[hash_items[i].hash]=i;
}
void hash(const char* keyword, size_t * h1, size_t * h2) {
for(*h1=1, *h2=1; *keyword!= '\0'; keyword++) {
*h1 *= 17; *h1 += 13*(*keyword);
*h2 *= 13; *h2 += 17*(*keyword);
}
*h1 %= TABLE_SIZE;
*h2 %= (TABLE_SIZE-1); *h2 += 1;
}
/* inserting keyword to hash table.
* Returns
* INSERTED - word has been successfully inserted
* NOT_INSERTED - can't find free hash index
* COUNTER_INCREMENTED - word already inserted, just inc word count */
insertstatus_t
insert(size_t* hash_index,HASH_ITEM* hash_items,size_t* items_count,
const char* keyword) {
size_t h1,h2,hfirst;
hash(keyword, &h1, &h2);
hfirst=h1;//first hash without probe
/* searching for already inserted word and increment counter*/
for (size_t i=0; hash_index[h1] != -1 && i<TABLE_SIZE+1; i++) {
if (strcmp(keyword, hash_items[hash_index[h1]].word) == 0 ) {
hash_items[ hash_index[h1] ].count++;
return COUNT_INCREMENTED;
}
h1 += h2; h1 %= TABLE_SIZE; // next hash with probe
if(h1==hfirst)
return NOT_INSERTED; //free pos not found, word not inserted
}
/* if it is the first insert */
hash_index[h1] = *items_count;
hash_items[*items_count].word=strcpy(malloc(strlen(keyword)+1),keyword);
hash_items[ *items_count ].count = 1;
hash_items[ (*items_count)++ ].hash = h1;
return INSERTED;
}
void
print(const size_t* hash_index,const HASH_ITEM* hash_items,
size_t items_count) {
size_t i;
for(i=0; i<items_count; ++i)
(void)printf("%s %d\n",hash_items[i].word, hash_items[i].count);
(void)printf("\nCount of different words = %d\n",i);
}
/* returning 1 - word successfulley readed to WORD_BUF
0 - no words left*/
int getword(char ** word_buf) {
/*if it is the first using of WORD_BUF*/
if(*word_buf==NULL)
*word_buf=malloc(BUFF_SIZE);

size_t word_len = 0; //current length of string in WORD_BUF
static size_t wbuf_growth=1;//level of WORD_BUF size,(BUFF_SIZE*WBUF_GROWTH)
const size_t wbuf_growth_max = 5;//max value of the WBUF_GROWTH
unsigned char c; //current readed symbol
int word_started = 0;

while(fread(&c,1,1,stdin)) {
if(isalpha((unsigned char)c) || (word_started && c == '\'')) {
if(!word_started) {
word_len = 0;
word_started = 1;
}
/* if word buffer is full we must to reallocate it or break
* the cycle if buffer have a maximum length */
if(word_len+1 > wbuf_growth*BUFF_SIZE) {
if(wbuf_growth < wbuf_growth_max)
*word_buf=realloc(*word_buf,++wbuf_growth*BUFF_SIZ E);
else
break;
}
(*word_buf)[word_len++] = (unsigned char)tolower(c);
} else if(word_started) {
/* we found end of the word */
break;
}
} /* EOF or delimiter(end of word) is reached */

if(word_started) {
(*word_buf)[word_len]= '\0';
return 1;
} else {
free(*word_buf);
return 0;
}
}
int main(void) {
/* storage for words and their attributes */
HASH_ITEM hash_items[TABLE_SIZE];
size_t items_count = 0;
/* hashes of the words are the indexes of this array, values is the
* indexes of appropriate HASH_ITEM's in storage */
size_t hash_index[TABLE_SIZE];
char * word = NULL;

(void)memset(hash_index,-1,TABLE_SIZE*sizeof(size_t));
while(getword(&word)) {
if(insert(hash_index,hash_items,&items_count,word)==NOT_INSERTED)
(void)printf("Warning: keyword can't be inserted %s\n",word);
}
sort(hash_index,hash_items,items_count);
print(hash_index,hash_items,items_count);
return EXIT_SUCCESS;
}
Попробуйте покомпилировать это под вендой (у меня ее нет).
Компилировать надо в стандарте Си от 99-го года, запускать как >prog_name < text_file.txt
Просто нужно узнать, будет ли оно там работать + конструктивно попридирайтесь к коду

_nic
14.04.2009, 17:20
Можно как то с помощью винапи получить мд5 хеш строки?

criz
14.04.2009, 20:56
Можно как то с помощью винапи получить мд5 хеш строки?
тут не винапи нужно, а криптоапи:
http://msdn.microsoft.com/en-us/library/aa382380(VS.85).aspx :)
вот еще есть: http://polarssl.org/?page=show_source&type=source&file=md5

awdrg
14.04.2009, 21:12
Вопрос по Borland c++ builder 6.0
Кусок кода, в котором содержится первая строчка текста с формы Memo
Memo1->Lines->Strings[0]
Как загнать в массив char это значение?

Turbomax
14.04.2009, 21:16
а с turbo c норм переходить на c++ builder 2007 ?

criz
14.04.2009, 21:27
Вопрос по Borland c++ builder 6.0
Кусок кода, в котором содержится первая строчка текста с формы Memo
Memo1->Lines->Strings[0]
Как загнать в массив char это значение?

strcat(str, Memo1->Lines->Strings[0].c_str());

Дикс
14.04.2009, 21:39
есть класс
у него свойство, к примеру test
я могу объявить его так:

static const int test = 4;

но не могу понять смысла модификаторов const и static.

ss88
14.04.2009, 22:04
Мдя...... судя по вопросам, которые тут задаются, я попал, явно, не в ту тему...

ss88
14.04.2009, 22:08
есть класс
у него свойство, к примеру test
я могу объявить его так:

static const int test = 4;

но не могу понять смысла модификаторов const и static.

static означает, что это поле/свойство будет присуще всем экземлярам класса и просто определению класса, т.е. если ты поменяешь его в одном обьекте, то поменяется оно во всех экземлярах этого класса.
const - просто свидетельствует о константности этого обьекта

s_p_a_m
14.04.2009, 22:45
как в С++ перевести число из Восьмеричной системы в двоичную, или же в другую, если можно то пример :)

Roston
14.04.2009, 22:52
плиз удалите мой пост

ss88
14.04.2009, 23:53
помогите с такой вот штукой

Попробуйте покомпилировать это под вендой (у меня ее нет).
Компилировать надо в стандарте Си от 99-го года, запускать как >prog_name < text_file.txt
Просто нужно узнать, будет ли оно там работать + конструктивно попридирайтесь к коду
Все компилируется и работает, спасибо за внимание :)

ss88
14.04.2009, 23:59
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?

#define int* pint


typedef int* pint

Хороший тест на внимательность :)

rudvil
15.04.2009, 00:21
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?

#define int* pint


typedef int* pint

Хороший тест на внимательность :)
Имхо как можно сравнивать две разные вещи?
#define дефайнит, а typedef дефайнит доп. имя для выбранного типа.

ss88
15.04.2009, 00:24
Умник, вопрос, изначально с подвохом, typedef ничего не "дефайнит", так что ваш пост лишь уточняет вашу некомпетентность.

rudvil
15.04.2009, 00:33
Умник, вопрос, изначально с подвохом, typedef ничего не "дефайнит", так что ваш пост лишь уточняет вашу некомпетентность.
Defined data types (typedef)


C++ allows the definition of our own types based on other existing data types. We can do this using the keyword typedef, whose format is:

typedef existing_type new_type_name ;


where existing_type is a C++ fundamental or compound type and new_type_name is the name for the new type we are defining. For example:

typedef char C;
typedef unsigned int WORD;
typedef char * pChar;
typedef char field [50];

In this case we have defined four data types: C, WORD, pChar and field as char, unsigned int, char* and char[50] respectively, that we could perfectly use in declarations later as any other valid type:
C mychar, anotherchar, *ptc1;
WORD myword;
pChar ptc2;
field name;

оригинал (http://www.cplusplus.com/doc/tutorial/other_data_types/)

ss88
15.04.2009, 00:38
Мдя, либо вы не поняли вопроса, либо вы не знаете, как происходит процесс "превращения" исходника в исполнимый файл

rudvil
15.04.2009, 00:40
Мдя, либо вы не поняли вопроса, либо вы не знаете, как происходит процесс "превращения" исходника в исполнимый файл
значит не понял) ну и ладно с ним)

FoV
15.04.2009, 15:45
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?

Не будет равнозначным: в первом случае препроцессор тупо заменит все int* на pint,а во втором объявляется новое имя для указателя на int.
Код не работает с дефайном:

int b = 10;
pint a = &b,c = &b;

Vitaliy-55
15.04.2009, 15:50
Доброго времени суток!!!
У меня такая проблема, необходимо через Wininet настроить подключение от клиента к серверу (используя аутентификацию) и дальнейшую загрузку файлов с сервера.
Делаю так:

function GetInetFile
(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen,mnb: DWORD;
f: File;
sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PR OXY,PIInfo^.lpszProxy,nil,0);
Dispose(PIInfo);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;

procedure TForm1.ConnectButtonClick(Sender: TObject);
var
i,k:integer;
old_date,ftp_name,ftp_name1,save_name:string;
Flags, TargetFrameName, PostData, Headers: OleVariant;
FileOnNet, LocalFileName: string;
begin
FileOnNet:='http://trulala.ru/lala/123.txt';
LocalFileName:='123.txt';
if GetInetFile(FileOnNet,LocalFileName)=True then
ShowMessage('Файл загружен')
else
ShowMessage('Ошибка загрузки файла')

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

Помогите пожалуйста.
Заранее благодарен.

Lee_fx
15.04.2009, 16:37
Доброго времени суток, такой вопрос (С++):
Как можно реализовать решение системы уравнений вида:
С1 + С2 = d
a*С1 + b*С2 = e
В ней меняются коэффициенты a, b и d,e причем d,e либо 0 либо 1.
Немогу сообразить как ее программно оформить)
Нужно получить С1 и С2

Kaimi
15.04.2009, 17:02
Как то так, если я нигде не накосячил

#include <iostream.h>

void main()
{
float a,b,d,e;
cout<<"A: ";
cin>>a;
cout<<"B: ";
cin>>b;
cout<<"D: ";
cin>>d;
cout<<"E: ";
cin>>e;

float d1 = b-a;
float d2 = d*b-e;
float d3 = e-a*d;

cout<<"C1 = "<<d2/d1<<"; C2="<<d3/d1;

}

VIP
15.04.2009, 17:33
У меня вот какой вопрос. Вот допустим у меня в папке лежит файл text.txt и в этой же папке исходники проги на С. Как можно сделать, чтобы при выполнении программы текст из text.txt перешёл в переменную
char text
? как я понял из книги Кернигана и Ритчи это должна делать функция fopen, но как я ни пытался разобраться не могу понять как конкретно она работает. Кому не сложно выложите пожалуйста пример такой проги. На примере как-то лучше понимается.

P.S. Заранее спасибо! =)

4prazd
15.04.2009, 17:34
дайте ссылки на то, что можно почитать, чтобы обучиться с++ с полного нуля, вообще с полного. То есть нужна инфа с начального курса до проффессионала.

Kaimi
15.04.2009, 18:23
У меня вот какой вопрос. Вот допустим у меня в папке лежит файл text.txt и в этой же папке исходники проги на С. Как можно сделать, чтобы при выполнении программы текст из text.txt перешёл в переменную
char text


#include <stdio.h>
#include <stdlib.h>

void main()
{
FILE *in = fopen("file.txt", "r");
fseek(in, 0L, SEEK_END);
long end = ftell(in);
char *text;
text = (char *) malloc(end);
fseek(in, SEEK_SET, 0);
fread(text, end, 1, in);
fclose(in);
}

Glazz
15.04.2009, 20:16
дайте ссылки на то, что можно почитать, чтобы обучиться с++ с полного нуля, вообще с полного. То есть нужна инфа с начального курса до проффессионала.
не проффесионал, но я читаю Объектно Ориентированное Программирование Си++ . Роберт Лафоре. У меня в бумажном варианте. Издатель Питер.

Glazz
15.04.2009, 20:17
Как можно узнать , какие библиотеки использует .exe ?

Balvan
15.04.2009, 20:54
Можно мониторами апи функций(типа Filemon или т.п.), а также дебагерами(типо ольги) и IDEшками ну и т.д.т.п.

Vitaliy-55
17.04.2009, 11:57
Доброго времени суток!
Подскахите пожалуйста, как с помощю idHTTP и idFTP скачать файл с прокси сервера, используя аутентификацию. Срочно нужно. Буду очень признателен.

Заранее благодарен!!!

.ATK
17.04.2009, 22:25
Подскажите как просмотреть ресурсы в exe-файле! может у кого есть какие исходники?

Plaxxx
18.04.2009, 11:05
А мне нужно на С++ сравнить один имейдж с другим и если они одинаковые то вывести на экран форму... как это сделлать подскажите плиз!!!

.ATK
18.04.2009, 12:04
смотри структуру расширения имейджа) например, для bmp: http://ru.wikipedia.org/wiki/BMP тупо считываешь некоторые поля (CreateFile()) и сравниваешь!!

Plaxxx
18.04.2009, 12:16
Кто сделает то что описал АТК подарю семизнак( т.к. больше ничего нету)

Forcer
18.04.2009, 12:48
Подскажите как просмотреть ресурсы в exe-файле! может у кого есть какие исходники?
http://www.google.ru/search?q=exe+resource

например, http://www.angusj.com/resourcehacker/

.ATK
19.04.2009, 18:27
ну понятно почему у тебя массив int в котором по начальному адресу лежит число 23... ты выводишь первый элемент этого массива = 4 байта = 23... какое 2 ты хочешь увидеть?

Так посмотри:
union {
int i;
int c[4];
}asc;
asc.i=2;
asc.c[1]=3;
printf("%d",asc.c[0]);

CHIP:))
19.04.2009, 18:30
Ой блин хотел изменить сообщение, а случайно удалил) Спс за помощь)

Только вот если у меня число 23 уже и так разделено на 2 и 3 то зачем мне вообще с юнион парица. Мне надо иметь возможность обращяться отдельно к цифре 2 и цифре 3 из числа 23

desTiny
19.04.2009, 18:39
Люди help плиз! у меня такая ситуация. я знаю неплохо C++ умею работать в C++ builder. я пытаюсь сделать клиент/серверное приложение(троян backdoor).
я юзал компоненты TServerSocket и TClientSocket. я сделал трой без проблем.Фишка заключается в том,что трой работает на основе этих компонентов токо с локальными компами!!! а мне надо чтоб через интернет.Как мне это реализовать? подскажите и направте в нужное направление плиз. За хороший ответ с меня естествено +.


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

Glazz
20.04.2009, 13:16
Не понимаю. Поставил Win7 7077. Поставил Dev-Cpp , Cygwin с gcc , GTK+, GTKmm.
Решил настроить Dev-Cpp под cygwin.
Прописал в параметрах компилятора путь к cygwin/usr/include/
Изменил пути к файлам g и g++(ну исполняемые файлы компилятора). Решил скомпилить .cpp с #include <iostream> , на что мне выдало:

[Linker error] undefined reference to `__imp___iob' и много других ошибок линковки, ссылающихся на :
more undefined references to `__imp___iob' follow
__errno
__filelengthi64
__CRT_MT и т.д.

Если не подключать iostream , то все норм.

Plaxxx
20.04.2009, 13:49
Нужно найти ошибки


equal = true;
for(int row=0;
row<Image1->Height() /* то ли свойство то ли метод не знаю но должно быть такое*/;
row++)
for(int col = 0;col<Image1->Width() /*тоже не знаю но IDE тебе в помощь); col++){
if(Image1->Canvas->Pixels[row][col] != Image10->Canvas->Pixels[row][col])
equal = false;
break;
}
}

Glazz
20.04.2009, 13:57
Нужно найти ошибки


equal = true;
for(int row=0;
row<Image1->Height() /* то ли свойство то ли метод не знаю но должно быть такое*/;
row++)
for(int col = 0;col<Image1->Width() /*тоже не знаю но IDE тебе в помощь); col++){
if(Image1->Canvas->Pixels[row][col] != Image10->Canvas->Pixels[row][col])
equal = false;
break;
}
}


ну непонятен тип equal , должен быть bool equal. Да и комментарии вторые криво стоят. открывающий слэш с звездочкой есть, а закрывающий я не увидел.

Plaxxx
20.04.2009, 14:06
Слеш и я увидел билдер там где row<Image1->Height() и там где col<Image1->Width() пишет Call of non-function

Plaxxx
20.04.2009, 14:08
Вообще этот код должен сравнивать один имейдж с другим... и еще вопрос есть сетка собранная из девяти имейдже как сделать так чтобы ее видно было после компиляции?

_nic
20.04.2009, 15:41
Подскажите какая тут ошибка

main()
{
HANDLE hpR1,hpR2,hpW1,hpW2;
DWORD readsz,rb,wb;
char buff[1024*5];
char *buf=new char[(1024*1024)*4];
SECURITY_ATTRIBUTES sec =
{
(DWORD)sizeof(SECURITY_ATTRIBUTES), NULL, TRUE
};
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
CreatePipe(&hpR1,&hpW1,&sec,0);
CreatePipe(&hpR2,&hpW2,&sec,0);
memset(&sInfo, 0, sizeof(sInfo));
memset(&pInfo, 0, sizeof(pInfo));
sInfo.cb=sizeof (STARTUPINFO);
sInfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHA NDLES;
sInfo.wShowWindow=SW_HIDE;
sInfo.hStdInput = hpR2;
sInfo.hStdOutput = hpW1;
sInfo.hStdError = hpW1;
CreateProcess(NULL,"cmd",&sec,&sec,true,0,NULL,NULL,&sInfo,&pInfo);
for(;;)
{
memset(buf,NULL,strlen(buf));
for(;;)
{
Sleep(300);
PeekNamedPipe(hpR1,NULL,NULL,NULL,&readsz,NULL);
memset(buff,NULL,(1024)*5);
if(readsz==0){break;}
ReadFile(hpR1,buff,(1024)*5,&rb,0);
strcat(buf,buff);
}//
printf("%s",buf);
memset(buf,NULL,strlen(buf));
cin>>buf;strcat(buf,"\n");
WriteFile(hpW2,buf,strlen(buf),&wb,0);
if(strcmp(buf,"exit\n")==0){break;}
}
delete []buf;
CloseHandle(hpR1);CloseHandle(hpR2);CloseHandle(hp W1);CloseHandle(hpW2);
}

Неполучается выполнять неодиночные команды с доп.параметрами

C:\>cd windows
cd
C:\

C:\>windows
"windows" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\>

Голову ломаю ,немогу понять что не так :confused:

Plaxxx
21.04.2009, 00:11
есть код Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,
Rect(0,0,Pict->Width / 3,Pict->Height / 3)); как ему значение присвоить ???

-m0rgan-
21.04.2009, 02:21
Вот начал С++ учить...
Как там работать с сетью?
Нуда послать запрос и вывести ответ.
Ну кароче хочю написать сплойт под php двиг, но я извращенец и хочу сделать єто на С++
Зарание спасибо!

slesh
21.04.2009, 10:13
#include <winsock2.h> подрубаеш
а дальше юзаеш стандартные сокеты, команды во всехя зыках одинаковые.
Советую прочитать статейку : Крис Касперски - Побег через брандмаузер
Хотябы тут http://www.insidepro.com/kk/016/016r.shtml
Довольно всё понятно при работе с сокетами

--StraNger--
21.04.2009, 10:51
Вот начал С++ учить...
Как там работать с сетью?
Нуда послать запрос и вывести ответ.
Ну кароче хочю написать сплойт под php двиг, но я извращенец и хочу сделать єто на С++
Зарание спасибо!
да для начала разберись с сокетами (WinSock)
Я лично изучал их по книге фленова (программирование в с++ глазами хакера)
сама книга не очень, но про сокеты там хорошо расписано, с примерами.
А что бы написать сплоит нужно учиться посылать заросы на хост, опять же с использованием сокетов

Glazz
21.04.2009, 11:39
есть код Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,
Rect(0,0,Pict->Width / 3,Pict->Height / 3)); как ему значение присвоить ???
дак Rect(); - это же метод. Методу нельзя присвоить значение.

ss88
22.04.2009, 10:25
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree_item_tag {
const char * word;
size_t count;
struct tree_item_tag *left, *right;
} tree_item_t;
/* insert keyword into tree or incrementing of word count. */
void insert(tree_item_t** first_item, const char* keyword) {
tree_item_t** pcur = first_item; /* pointer on current tree item */
int cmp_words;
while (*pcur != NULL) { /* searching for already inserted word inc count */
cmp_words = strcmp(keyword, (*pcur)->word);
if(cmp_words == 0) {
++(*pcur)->count;
return;
}
pcur=(cmp_words<0) ? &((*pcur)->left) : &((*pcur)->right);
} /* it is the first insert of this word */
*pcur = malloc( sizeof(tree_item_t) );
(*pcur)->word = strcpy( malloc( strlen(keyword) + 1) , keyword);
(*pcur)->count = 1;
(*pcur)->left = (*pcur)->right = NULL;
}
void print(tree_item_t* tree_item) {
if (tree_item == NULL) return;
print(tree_item->left);
(void)printf("%s %d\n",tree_item->word, tree_item->count);
print(tree_item->right);
}
/* Get word from STDIN and return it in WORD_BUF */
int get_word(char * buf_word, size_t buf_size) {
int c; /* current read symbol */
size_t word_len = 0;
while( (c=getchar()) != EOF) {
if(isalpha( (unsigned char) c) || (word_len > 0 && c == '\'')) {
buf_word[ word_len++ ] = (unsigned char) tolower(c);
if(word_len + 1 == buf_size) break; /* return only part of word */
} else if(word_len > 0) break; /* word can be returned */
}
if(word_len > 0) {
buf_word[ word_len ]= '\0';
return 1;
} else return 0;
}
int main(void) {
tree_item_t *first_item = NULL;
size_t buf_size = 50; /* must be bigger than 1 */
char * buf_word = malloc(buf_size);
while(get_word(buf_word, buf_size))
insert(&first_item, buf_word);
print(first_item);
return EXIT_SUCCESS;
}
Вот такой код. вобщем, из входного потока читается текст, разбивается на слова и заносится в бинарное дерево... Собственно, нужно сделать нерекурсивный вывод, шота голова уже не думает, помогите, плиз

Glazz
24.04.2009, 13:00
Кто нибудь знает книги/учебники и т.д. по GTKmm ? кроме оф. документации.