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

razb
20.12.2009, 01:47
Короче так, делаешь в unit1.h обьявление твоего класса в unit1.cpp реализация,
в unit2.h я так понимаю обьявление класса формы там и добавляешь переменную своего класса и создаешь экземпляр класса(в куче/стеке как хочешь)

п.с. лучше избегать обьявления глобальных переменных.
п.п.с. всю реализацию желательно выноси в .срр файлы что бы потом путаницы небыло.

так же у тебя будут проблемы, когда ты проинклюдишь этот класс более чем в одном файле
та я думаю борланд протект на хэдэры ifndef/define ставит ))

PandoraBox
20.12.2009, 01:59
Немного не ясно что тебе необходимо сделать, поподробней ...
проектирование и разработка системы для тестирование работоспособности сети (в графическом виде)

http://s14.radikal.ru/i187/0912/fc/6b01eeb85f65.png

SaiRus
20.12.2009, 02:06
зачем объект объявляешь прямо в хидере с описанием класса? его обычно объявляют в том классе, который будет его использовать. так же у тебя будут проблемы, когда ты проинклюдишь этот класс более чем в одном файле. нужно будет ставить модификатор static.
подожди, это коды были файлов срр а не хеадеров, в
юнит1.срр объявляется myclass calculate, потому что тут вычисляются методы, половинное деление, дробного шага и т.д., а юнит2.срр это форма которая показывает график функции (2*x*x-12.5)*cos(x), а эта функция вычисляется функцией

float FX( float X)
{
return (2*x*x-12.5)*cos(x)
}

и соответственно она является методом myclass, кароче ппц )))))))

Короче так, делаешь в unit1.h обьявление твоего класса в unit1.cpp реализация
так и есть

в unit2.h я так понимаю обьявление класса формы там и добавляешь переменную своего класса и создаешь экземпляр класса(в куче/стеке как хочешь)
по подробнее нельзя? :) объявление класса формы есть, где тут указать мой класс

class TForm2 : public TForm
{
__published: // IDE-managed Components
TChart *Chart1;
TLineSeries *Series1;
TCustomTeeFunction *TeeFunction1;
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
ладно ща книжку нашел Архангельский еще читану, вроде по классам

Ra$cal
20.12.2009, 02:11
да, лучше почитай книжку. это основы, в первых главах объясняются.

PandoraBox
20.12.2009, 02:18
SaiRus, вот еще глянь такой способ подстановки функции http://www.rsdn.ru/article/files/Classes/tparser.xml

SaiRus
20.12.2009, 03:42
Спасибо парни, на самом деле более - менее понял структуру :)
но щас пытаюсь понять следующее, почему мой созданый класс не понимает
такой строчки

Form2->Memo1->Lines->Add("Метод дробного шага:");

как сделать что бы он унаследовал объекты класса TForm2, конечно можно описать функции в самом классе, но охота собственный класс что бы препод не до копался :)

void TForm2 :: PL_DEL(float a,float b,float eps)
уже так сделал, все равно при выводе в мемо1 к примеру ошибку выкидывает...
не понял в чем фишка, но сделал...фсе спать, завтра разбираться как так получилось )))))

PandoraBox
20.12.2009, 05:04
#include "Form2.h"это в файл Form1.cpp например обяви и дальше мути что хочешь

немогу заюзать класс в юнит2.h как понял надо extern'ом тащить, класс вытаскиваю, дальше пытаюсь определить переменную для этого класса ни хера кароче...как правильно подключить этот класс? спасибо
[ extern <тип_данных> <имя_переменно> ] нужен для того чтобы обявить что вы можете по его точному имени получить данные с переменных с такм же именем в другом cpp файле, где указан <тип_данных> <имя_переменно> без extern !

SaiRus
20.12.2009, 05:41
на самом деле не понимаю только одно

почему такая конструкция не катила

в хедаре1 описан класс в файле реализации (срр1) описаны методы через расширение области "::", в этих методах выводиться в форм1->мемо1 текс, потом объявление класса объявление формы, вызов метода

а такая катит

в хедаре1 описан класс в файле реализации (срр1) описаны методы через расширение области "::", в этих методах выводиться в форм2->мемо1 текс

мож сам че то накосячил, ну ладно...

Ra$cal
20.12.2009, 12:10
если есть ошибки - пиши код. ломать голову над переводом русского в с++ задача та еще, слишком много нюансов.

SaiRus
20.12.2009, 14:39
похер кароче, разбирать ебанистические коды действительно не благодарное занятие :)

Ra$cal
20.12.2009, 14:45
строку с ошибкой тоже стоит выводить, а не описывать ее. это упростит анализ проблем и ускорит ответы.
PS: стиль форматирования просто ебанистический. нечитабельный ниразу. советую срочно сменить до более менее стандартных способов.

TPAXTOP
20.12.2009, 14:59
Помогите на С++ решить...
Вивести на екран символи та їх ASCП.Задані символи A,B,H,C,D
Вывести на экран символы и их ASCП. Задание символы A,B,H,C,D

POS_troi
20.12.2009, 15:39
он даже ASCII не пожет толком написать.

Chubakur
20.12.2009, 16:03
Помогите на С++ решить...
Вивести на екран символи та їх ASCП.Задані символи A,B,H,C,D
Вывести на экран символы и их ASCП. Задание символы A,B,H,C,D


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

int main() {
char array[]={'A','B','H','C','D'};
for(unsigned int counter=0;counter<strlen(array);counter++){
cout<<array[counter]<<"::"<<(int)array[counter]<<endl;
}
return 0;
}

razb
20.12.2009, 16:28
char array[]={'A','B','H','C','D'};
free(array);
ппц ...

TPAXTOP
20.12.2009, 17:05
он даже ASCII не пожет толком написать.
это не я писал, с моего ника..я вообще С++ не учу...

TPAXTOP
20.12.2009, 17:07
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

int main() {
char array[]={'A','B','H','C','D'};
for(unsigned int counter=0;counter<strlen(array);counter++){
cout<<array[counter]<<"::"<<(int)array[counter]<<endl;
}
free(array);
return 0;
}


спасибо!

Aleksandr.
20.12.2009, 17:08
2 Aleksandr.
Ты забыл указать пространство имён STD

либо пишешь

#include <iostream>
using namespace std;

int main()
{
cout << " Hello World!\n";
return 0;
}


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

#include <iostream>

int main()
{
std::cout << " Hello World!\n";
return 0;
}


К счастью После 10 построений получилось одно без ошибки =) Незнаю почему, но сам текст я не изменял.
Значит постоил, все сделал, но кнопачка скомпилировать не светиться. GRL+f7 Не действует, т.к чтото не сделал =( Подсккажите пожалуйста, вроде все делаю нормально.
Можете расписать ход действий, после написания Правильного текста. Что написанно в учебнике, все делал, видимо чтото устарело. Пользуюсь С++ 2010 От майкрософт
Заранее спс за ответ.

Aleksandr.
20.12.2009, 17:10
2алесандр. прочитай https://forum.antichat.ru/threadnav89681-12-40.html с 477 коммента и до конца.
там расписано.
Это компилятор 2008, Тоесть надо пользоваться им?
Ок попробую, спс за ответ. :)

pixelm
20.12.2009, 18:19
Помогите пожалуйста исправить ошибки

#include <stdio.h>
void sozdanie();
void dobavlenie();
void udalenie();
void korrektirovka();
void prosmotr();
void sortirovka();
void vivod();
void vihod();
void main(void)
{
char ch,v;
do {
printf("1. Sozdanie \n");
printf("2. Dobavlenie \n");
printf("3. Udalenie \n");
printf("4. Korrektirovka \n");
printf("5. Prosmotr \n");
printf("6. Sortirovka \n");
printf("7. Vivod \n");
printf("8. Vihod \n");
printf("Vvedite nomer komandi: \n");
ch=getchar();
v=getchar();
switch (ch)
{
case '1': sozdanie();break;
case '2': dobavlenie();break;
case '3': udalenie();break;
case '4': korrektirovka();break;
case '5': prosmotr();break;
case '6': sortirovka();break;
case '7': vivod();break;
}
} while ((ch)='1' && ch<='7');
}
void sozdanie()
{
struct poezd
{
char punkt[15];
int nomer;
int chas;
int minuta;
}train;
FILE*f;
int i;
f=fopen ("test","w");
if(ferror(f)) perror("oshibca");
else{for(i=0;i<3;i++){
printf("\n nazvanie punkta naznachenya:");
scanf("%s", train.punkt);
printf("\n nomer poezda:");
scanf("%d",&train.nomer);
printf("\n vremya otpravlenya");
scanf("%d:%d",&train.chas, &train.minuta);
fwrite(&train,sizeof (struct poezd),1,f);
}
fclose(f);
}
}
void dobavlenie()
{
struct poezd
{
char punkt[15];
int nomer;
int chas;
int minuta;
}train;
int b, i;
FILE* fp;
fp=fopen("test","a");
if(ferror(fp)) perror("oshibca");
else{for(i=0;i<3;i++){
printf("\n nazvanie punkta naznachenya:");
scanf("%s", train.punkt);
printf("\n nomer poezda:");
scanf("%d",&train.nomer);
printf("\n vremya otpravlenya");
scanf("%d:%d",&train.chas, &train.minuta);
fwrite(&train,sizeof (struct poezd),1,fp);
}
fclose(fp);
}
}
void udalenie()
void ydal(){struct poezd
{char punkt[15];
int nomer;
int chas;
int minuta;
}train;
int c, h, g,r;
clrscr();
if((f=fopen("test","a+b"))!=NULL)
{s=fopen("new","a+b");
printf("Vvedite nomer:");
scanf("%d",&h);
while(1){
c=fread(&train, sizeof(train),1,f);
if(c!=1) break;
if(train.nomer!=h)
fwrite(&train,sizeof(train),1,s);
else fread(&train,sizeof(train),1,s);
}
void korrektirovka()
{
struct poezd
{
char punkt[15];
int nomer;
int chas;
int minuta;
}train;
FILE* f;
int b,k,n;
if((f=fopen("test","r+"))==NULL);
printf("oshibca");
else
{
k=fseek(f,0,SEEK_END);
b=ftell(f);sizeof(train);
printf("Vvedite nomer zapisi");
scanf("%d",&n);
if(n>b)
printf("Takoi zapisi net");
else{
fseek(f,(n-k)* sizeof(train),0);
fread(&train,sizeof(train),1,f);
puts("Vvedite novoe nazvanie punkta naznachenya");
scanf("%s",&train.punkt);
puts("Vvedite novii nomer poezda");
scanf("%d",&train.nomer);
puts("\n vvedite novoe vremya otpravlenya");
scanf("%d:%d",&train.chas, &train.minuta);
fseek(f,(n-1)* sizeof(&train),0);
fwrite(&train,sizeof(train),1,f);
fclose(f);
}
void prosmotr()
{
struct poezd
{
char punkt[15];
int nomer;
int chas;
int minuta;
}train;
FILE* f;
int cc;
if((f=fopen("test","r"))!=NULL)
{
while(1)
{
cc=fread(&train,sizeof(struct poezd),1,f);
if(cc!=1) break;
printf("\n Nazvanie %s nomer %d chas %d minuta %d 1:%ch 2:%d 3:%d 4:%d");
}
void sortirovka(struct poezd items[], int count)
{
qs_struct(items,0, count-1);
}
void qs_struct(struct poezd items[], int left, int right)
{
register int i,j;
char *x;
struct poezd temp;
i=left; j=right;
x=items[(left+right)/2].nomer;
do {
while((strcmp(items[i].nomer,x) < 0) && (i < right)) i++;
while((strcmp(items[j].nomer,x) > 0) && (i > left)) j--;
if(i<= j) {
temp = items[i];
items[i] = items[j];
items[j] = temp;
i++; j--;
}
} while (i <= j);
if (left < j) qs_struct(items, left, j);
if (i < right) qs_struct(items, i, right);
}
void vivod()
{
printf ("Vivod faila \n");
}
void vihod()
{
printf ("Vihod \n");
}

PandoraBox
20.12.2009, 18:30
есть такой компонент или библиотека по работе с графами типа: сеть ???

http://s14.radikal.ru/i187/0912/fc/6b01eeb85f65.png

Aleksandr.
20.12.2009, 18:43
Del

POS_troi
20.12.2009, 19:02
2PandoraBox

Конкретно под эту задачу не встречал никогда.

PandoraBox
20.12.2009, 19:58
вот вот 3й день гугль пинаю Boost Graph Library под (Embarcadero RAD Studio C++Builder 2010) но примеров мало и ничего интересного нарисовать не выходит ....

Aag
20.12.2009, 22:38
вот вот 3й день гугль пинаю Boost Graph Library под (Embarcadero RAD Studio C++Builder 2010) но примеров мало и ничего интересного нарисовать не выходит ....

Насколько можно понять из ваших сообщений нужна визуализация графов.
Список пограммых решения по визуализации графов _http://www.ics.uci.edu/~eppstein/gina/gdraw.html

Может быть, такая штука пригодится _http://lib.custis.ru/index.php/Graphviz

PandoraBox
20.12.2009, 23:03
Aag, спс но я это уже видел
Мне нужно на C++ реализовать под соединение и репликацию в своем кластере собственного приготовление

balyuk
20.12.2009, 23:17
кто силен в вике разметке?

a1ertso
21.12.2009, 06:02
помогите пожалуйста с выводом.
ширина поля 5, количество знаков после запятой 2.
Правильно я записал? И как правильно?
WriteLn (' ':5,'K=',K:5,' ':2,'K=',K); //Все разобрался К:5:2

slesh
21.12.2009, 10:37
a1ertso прежде чем программировать научись отличать языки.
нахера ты вопрос по паскалю в тему про С++ зафигачил??

writeln('K=', K:5:2);

Eo0
21.12.2009, 12:45
#define ID_BUTTON2 1000
#define IMAGE_BITMAP2 1
HWND button2;
HBITMAP butt2 = (HBITMAP)LoadImage(NULL,L"themes/default/butmeoff.bmp",IMAGE_BITMAP2,0,0,LR_LOADFROMFILE);
button2=CreateWindow(L"button",L"Кнопка №2",WS_VISIBLE|WS_CHILD,49,105,215,20,hwnd,(HMENU)ID_ BUTTON2,NULL,NULL); помогите пожалуйста, весь гугл обшарил, хочу сделать чтобы вместо кнопки была картинка из папки, уже что только не делал, не выходит((
и ещё один вопрос.
LPCWSTR strplus(char *img){
char fon[100];
strcpy(fon,"themes/");
strcpy(fon,::theme);
strcpy(fon,"/");
return (LPCWSTR)strcat(fon,img);
} если использовать так strplus("/fon.bmp"); она возвращает themes/default/fon.bmp адрес верен, но когда загружаю картинку, она не грузится LoadImage(NULL,strplus("/fon.bmp")...... а если пишу просто
LoadImage(NULL,L"themes/default/fon.bmp".... то всё работает, почему?

Ra$cal
21.12.2009, 15:34
читай на тему область видимости и время жизни локальных переменных

Lee_fx
21.12.2009, 16:47
Есть процесс, нужно узнать какие файлы он использует и к каким обращается?
Как в Filemon'е.
Как это реализуется?

zeppe1in
21.12.2009, 18:39
например можеш хукать апи CreateFile

Eo0
21.12.2009, 21:03
читай на тему область видимости и время жизни локальных переменных
Проблема не в этом, переменная точно видна, точно существует и точно содержит верный адрес но не работает((

t4Nk
21.12.2009, 22:37
Проблема не в этом, переменная точно видна, точно существует и точно содержит верный адрес но не работает((
В этом. При выходе из функции переменная fon уже не существует и в памяти которую она занимала может быть что угодно.

Eo0
21.12.2009, 22:42
В этом. При выходе из функции переменная fon уже не существует и в памяти которую она занимала может быть что угодно.
хм, дык я же её возвращаю return (LPCWSTR)strcat(fon,img); даже если написать это в не функции то то же не работает, переменная не пуста и значение верно но не работает.
//хм, уже не верно.
(LPCWSTR)"theme" превращает текст в каракуль, а если написать L"theme" то всё нормально, разве (LPCWSTR) и L преобразуют в разные типы?
// всё проблему решил

eldar85
21.12.2009, 23:12
всем здрасти.
возникла нужда в создании самого простенького окна написанного на плюсах ... может кто поделиться опытом?

_antony
22.12.2009, 00:52
Есть процесс, нужно узнать какие файлы он использует и к каким обращается?
Как в Filemon'е.
Как это реализуется?
NtQuerySystemInformation с классом SystemHandleInformation. на пайпах виснет.
"Как в Filemon'е." - Драйвер фильтр фс писать надо.
Берите исходники файлмона и изучайте.
например можеш хукать апи CreateFile
К чему это было сказано - непонятно.

Ra$cal
22.12.2009, 02:13
возникла нужда в создании самого простенького окна написанного на плюсах ... может кто поделиться опытом?
не пробовал запустить студию и создать оконный win32 проект мастером? не?

Semus
22.12.2009, 21:18
Здравствуйте, помогите разобраться, почему не компилируется следующая программа (вернее компилируется, но во время исполнения вылетает ошибка)


//определяем число вхождений подстроки в введенную пользователем строку

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

int main ()
{
//вводим строку в которой осуществляем поиск
char * stroka;
printf ("Vvedite stroku:");
gets (stroka);
printf ("%s\n", stroka);

// вводим строку которую будем искать
char * iskom;
printf ("Vvedite iskomuy stoku: ");
scanf ("%s", &iskom);

//указатель на на номер на найденный номер
char * point = 0;

//следующая переменная - счетчик
int i = 0;

for (;;)
{
point = strstr(stroka, iskom);
stroka=point+1;
if (point==NULL) {break;}
i++;
};

printf ("kolichestvo vhogdenii = %d", i);

return 0;
}



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

cremator (c)
22.12.2009, 22:14
подскажите, как преобразовать тип AnsiString в тип char[]. Т.е. мне надо в переменную char str[255] поместить текст из Text->Edit. В С++ новичёк, извините за глупый вопрос)

Kaimi
22.12.2009, 22:20
c_str есть для этого по-идее

rudvil
22.12.2009, 22:31
Здравствуйте, помогите разобраться, почему не компилируется следующая программа (вернее компилируется, но во время исполнения вылетает ошибка)


//определяем число вхождений подстроки в введенную пользователем строку

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

int main ()
{
//вводим строку в которой осуществляем поиск
char * stroka;
printf ("Vvedite stroku:");
gets (stroka);
printf ("%s\n", stroka);

// вводим строку которую будем искать
char * iskom;
printf ("Vvedite iskomuy stoku: ");
scanf ("%s", &iskom);

//указатель на на номер на найденный номер
char * point = 0;

//следующая переменная - счетчик
int i = 0;

for (;;)
{
point = strstr(stroka, iskom);
stroka=point+1;
if (point==NULL) {break;}
i++;
};

printf ("kolichestvo vhogdenii = %d", i);

return 0;
}



Заранее благодарю
Нельзя использовать переменные "stroka" и "iskom" с неизвестной длиной для gets().

Eo0
22.12.2009, 22:35
Эх, достал меня с++. хочу получить содержание файла в wchat_t* но выдаёт ошибку уже после компиляции, где ошибка?
wchar_t* theme;
wchar_t* tmp;
wchar_t* file(const wchar_t* file_name){
FILE *file;
file = _wfopen( file_name, L"a");
::tmp=fgetws(::tmp,100,file);
fclose( file );
return ::tmp;
}

cremator (c)
22.12.2009, 22:35
c_str есть для этого по-идее
c_str переводит в тип string из char*, а у меня char[]. Как их друг в друга преобразовать?

rudvil
22.12.2009, 23:05
Эх, достал меня с++. хочу получить содержание файла в wchat_t* но выдаёт ошибку уже после компиляции, где ошибка?
wchar_t* theme;
wchar_t* tmp;
wchar_t* file(const wchar_t* file_name){
FILE *file;
file = _wfopen( file_name, L"a");
::tmp=fgetws(::tmp,100,file);
fclose( file );
return ::tmp;
}
#include <iostream>
#include <fstream>

int main () {
std::wifstream::pos_type size;
wchar_t* memblock;
std::wifstream file("example.bin", std::ios::in | std::ios::binary | std::ios::ate);
if (file.is_open()) {
size = file.tellg();
memblock = new wchar_t[size];
file.seekg (0, std::ios::beg);
file.read (memblock, size);
file.close();
//тут работаешь с memblock

//после работы не забываем почистить за собой
delete[] memblock;
}
else {
std::cout << "Unable to open file\n";
}
return 0;
}

Eo0
22.12.2009, 23:21
rudvil, то что надо, только почему то возвращаются каракули((
//
строка из файла используется для открытия другого файла в качестве путя. Такая же каракуль и при (LPCWSTR)"default" а если написать L"default" всё нормально, почему?

t4Nk
23.12.2009, 00:22
rudvil, то что надо, только почему то возвращаются каракули((
//
строка из файла используется для открытия другого файла в качестве путя. Такая же каракуль и при (LPCWSTR)"default" а если написать L"default" всё нормально, почему?

Eo0, ты так и будешь продолжать брутфорсить компилятор своими догадками? Возьми учебник по С++, любой, почитай, и эти вопросы отпадут сами собой.
(LPCWSTR)"default" <- тут ты строку типа const char приводишь к типу LPCWSTR, который по сути является указателем на wchar_t,
L"default" - а здесь объявляешь как const wchar_t, потому и работает.

St0nX
23.12.2009, 23:59
http://img686.imageshack.us/img686/6167/78413304.th.jpg (http://img686.imageshack.us/i/78413304.jpg/)
Проблема в реализации данной схемы в Qt4
Вообщем есть класс формы в котором создано несколько экземпляров класса какого то эллемента, а так же класс формы имеет один экземпляр класса который производит вычисления. Так вот вопрос в классе вычислений имеется массив который необходимо изменять в классах эллементов класса формы. Вроде как все просто но че то не катит... может причина что в Qt4 какие то особенности есть...
Я пробовал передавать просто указатель на массив что не прокатывало. Пробовал объявлять указатель в классе формы и через него это осуществлять что тоже не канало... вообщем вот. :(

MiruMir
24.12.2009, 01:01
Ребята у меня такой вопрос - Брут на дэдике - регулярно выскакивает табличка "Удалённый рабочий стол отключен" как её вырубить чтоб она не появлялась , а то на автомат не как не поставить , приходится постоянно кликать ОК , что бы брутить дальше иначе весь процесс тормазиться !

razb
24.12.2009, 03:43
Вроде как все просто но че то не катит... может причина что в Qt4 какие то особенности есть...
Я пробовал передавать просто указатель на массив что не прокатывало. Пробовал объявлять указатель в классе формы и через него это осуществлять что тоже не канало... вообщем вот.
что значит не прокатывало? яснее опиши проблему, а лучше выложи код.

gisTy
24.12.2009, 12:50
Ребята у меня такой вопрос - Брут на дэдике - регулярно выскакивает табличка "Удалённый рабочий стол отключен" как её вырубить чтоб она не появлялась , а то на автомат не как не поставить , приходится постоянно кликать ОК , что бы брутить дальше иначе весь процесс тормазиться !есть программы эмулирующие действия мыши. например AC Tool или UOPilot. вобщем парси гугл на тему эмуляторов мыши и автокликеров.

SeNaP
24.12.2009, 15:12
Пытаюсь скомпилировать сплойт.
Но выдает какие то не понятные ошибки
СКРИН (http://s50.radikal.ru/i129/0912/67/60fafa0d5569.png)
Помогите разобраться :)

Сам сплоит (http://www.milw0rm.com/exploits/5092)

POS_troi
24.12.2009, 15:37
1 #include <asm/page.h> - этого файла нет и соответственно ошибка два
2 PAGE_SIZE - скорее всего из-за #1
3 Пытается передать Char* в int

Код не смотрел ибо лень, кажется там просто на дурака

Lee_fx
24.12.2009, 18:14
В переменной int лежит адрес, как присвоить этот адрес указателю типа char* ? Кастить что-то не выходит(

int addr = 0x0012FE74;
char* ptr = ???

Irdis
24.12.2009, 18:44
никак
нельзя задавать адреса

Ra$cal
24.12.2009, 19:38
int addr = 0x0012FE74;
char* ptr = (char*)addr;

Admin Derek
24.12.2009, 19:55
объясните что я не так сделал, изучаю сокеты, по книге "Эффективное программирование TCP/IP", но не как не пойму в чём ошибка. процесс останавливаеться на error socket..

код:

#include <winsock2.h>
#include <iostream>
using namespace std;

int main(void)
{
struct sockaddr_in local;
int s;
int s1;
int rc;
char buf[1];

local.sin_family = AF_INET;
local.sin_port = htons(666);
local.sin_addr.s_addr = INADDR_ANY;

if((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
cout << "error socket\n";
return 1;
}

if((rc = bind(s, (sockaddr*)&local, sizeof(local))) == SOCKET_ERROR)
{
cout << "error bind\n" << errno;
return 1;
}
if((rc = listen(s, 5)))
{
cout << "error listen\n";
return 1;
}

if((s1 = accept(s, NULL, NULL)) < 0)
{
cout << "error accept\n";
return 1;
}

if((rc = recv(s1, buf, 1, 0)) <= 0)
{
cout << "error \n";
return 1;
}
cout << "end: " << buf[0];
return 0;

}

:confused:

Finger2010
24.12.2009, 20:05
Кто может сорцы критора выложить любого , а то ни как понять не могу одну фишку

Finger2010
24.12.2009, 20:06
есть программы эмулирующие действия мыши. например AC Tool или UOPilot. вобщем парси гугл на тему эмуляторов мыши и автокликеров.

Мошь написать на Wapi простенькую прогу которая будет искать это окно и если найдет закрывать , еси че не знаешь пиши в асю подскажу 411 389 297

St0nX
24.12.2009, 20:26
что значит не прокатывало? яснее опиши проблему, а лучше выложи код.
Делаю так:
класс какого то объекта на форме:
#ifndef OBJECT_H
#define OBJECT_H

#include <QGraphicsScene>



class Object : public QGraphicsScene
{
Q_OBJECT
public:
Object(QObject *parent = 0);
int posit;
int * mas[3][3];
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent);
};

#endif // OBJECT_H

Класс в котором проходят некие вычисления:

#ifndef XO_II_H
#define XO_II_H

struct crd
{
int x;
int y;
};

class xo_ii
{
public:
int * mas[3][3];
xo_ii();
crd * CrdOpr(int poss);
private:
int SummStr(int nStr);
int SummDl1();
int SummDl2();
crd * OprNullStr(int nStr);
crd * OprNullDl1();
crd * OprNullDl2();
};

Класс самой формы:

#ifndef WIDGET_H
#define WIDGET_H

#include <QMainWindow>
#include "ui_mainwindow.h"

class Object;
class xo_ii;

class MainForm : public QMainWindow, public Ui::XO
{
Q_OBJECT
public:
MainForm();
private:
Object * sc;
xo_ii * xoii;
};

#endif // WIDGET_H

#include "widget.h"
#include "object.h"
#include "xo_ii.h"

MainForm::MainForm()
{
setupUi(this);
xoii = new xo_ii;
sc = new Object;
sc->mas = xoii->mas;
sc->posit = 1;
graphicsView->setScene(sc);
}

Данная схема не работает
ошибка с троке
sc->mas = xoii->mas;
/home/kubik/XO/xo_test/XO/widget.cpp:11: error: invalid array assignment

razb
24.12.2009, 22:19
sc->mas = xoii->mas;
/home/kubik/XO/xo_test/XO/widget.cpp:11: error: invalid array assignment
ты хоть читаешь что компилятор пишет?

for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
sc->mas[i][j] = xoii->mas[i][j];
}
}

Вообще лучше делать данные поля закрытыми и обращатся к ним через геттеры/сеттеры.

St0nX
24.12.2009, 22:28
ты хоть читаешь что компилятор пишет?

for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
sc->mas[i][j] = xoii->mas[i][j];
}
}

Вообще лучше делать данные поля закрытыми и обращатся к ним через геттеры/сеттеры.
При использовния данной конструкции я тупо копирую массив 1 в другой. А мне как бы надо что бы была одна ссылка на область памяти(массив) и я ее мог изменять во всех классах и так же при изменение в одном классе изменения отражались во всех

Aag
24.12.2009, 23:46
объясните что я не так сделал, изучаю сокеты, по книге "Эффективное программирование TCP/IP", но не как не пойму в чём ошибка. процесс останавливаеться на error socket..


WSAStartup, WSACleanup

Сравни свой код с одним из примеров из msdn

#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "wininet.lib")

int main(void) {

//----------------------
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR) {
printf("Error at WSAStartup()\n");
return 1;
}

//----------------------
// Create a SOCKET for listening for
// incoming connection requests.
SOCKET ListenSocket;
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}

//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port for the socket that is being bound.
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(27015);

if (bind( ListenSocket,
(SOCKADDR*) &service,
sizeof(service)) == SOCKET_ERROR) {
printf("bind() failed.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}

//----------------------
// Listen for incoming connection requests.
// on the created socket
if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
printf("Error listening on socket.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}

//----------------------
// Create a SOCKET for accepting incoming requests.
SOCKET AcceptSocket;
printf("Waiting for client to connect...\n");

//----------------------
// Accept the connection.
AcceptSocket = accept( ListenSocket, NULL, NULL );
if (AcceptSocket == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
} else
printf("Client connected.\n");

// No longer need server socket
closesocket(ListenSocket);

WSACleanup();
return 0;
}

Дикс
25.12.2009, 14:24
скажите пожалуйста, как грамотно содержимое файла занести в массив строк типа string? размер файл заранее неизвестен.

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

типа

string []rows = loadFile("rows.txt");

Дикс
26.12.2009, 15:14
открываю файл

ifstream fin("file.txt");

копирую его в вектор, типа string

copy(istream_iterator<string>(fin), istream_iterator<string>(), back_inserter(vect));

получаю вектор в котором файл разбит на элементы по ПРОБЕЛАМ

как сделать так, чтобы он разбивал по переводам строк?

ASQX
26.12.2009, 16:09
посоветуйте книгИ по С,
С != С++

jawbreaker
26.12.2009, 16:22
Брайан Керниган, Деннис Ритчи Язык программирования C (http://www.ozon.ru/context/detail/id/2480925/)

jawbreaker
26.12.2009, 16:27
открываю файл

ifstream fin("file.txt");

копирую его в вектор, типа string

copy(istream_iterator<string>(fin), istream_iterator<string>(), back_inserter(vect));

получаю вектор в котором файл разбит на элементы по ПРОБЕЛАМ

как сделать так, чтобы он разбивал по переводам строк?
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

int main()
{
ifstream fin("input.txt");
vector <string> v;
string tmp;

while (getline(fin, tmp))
{
v.push_back(tmp);
cout << tmp << "\n";
}
cin.get();
return 0;
}

ASQX
27.12.2009, 00:29
есть емаксеры? :\
тут такая проблема,

;; ECB
(add-to-list 'load-path "~/emacs.d/ecb-snap/")
(require 'ecb)
(global-set-key (kbd "\e\el") 'ecb-toggle-ecb-windows)
(global-set-key (kbd "\e\eea") 'ecb-activate)
(global-set-key (kbd "\e\eed") 'ecb-deactivate)

чего тут не так? хочу сделать из емакса ide под С++

// вопрос отпал, скачал с сорцефорце ecb и сменил бинд на другие кнопки,

krewger
28.12.2009, 14:55
Вычислить. Количество натуральных чисел сумма которых не превышает заранее заданного числа N

Fata1ex
28.12.2009, 18:37
for (int i=1; i<N; i++ ) {
sum+=i;
if (sum>N)
cout << k
else
k++;
}

PandoraBox
28.12.2009, 19:03
Программа автоматического построения топологии IP сети.
TRACEROUTE c построением графа и вывода на экран в графическом виде.
В результате работы программы должен получиться граф, узлами которого являются узлы вычислительной сети (компьютеры, свитчи).

кто знает как реализовать?

Retimiled
28.12.2009, 19:08
фигня .... 8))
упираешься лбом в ICMP (пинги)
иначинаешь давать время жизни пакета от 1 и выше.... каждый роутер ответит тебе
если пакет умер на нем.... дав данные о себе!

далее строишь граф!

PandoraBox
28.12.2009, 19:09
далее строишь граф!
есть пример ?

Retimiled
28.12.2009, 19:09
пример ICMP или графа?

... в инете есть и то и другое порознь!

Трейсерт лежал раньше на Comodo ... сейчас не в курсе!

PandoraBox
28.12.2009, 23:17
пример ICMP или графа?
пример графа

-CEREBRUM-
30.12.2009, 06:57
Привет всем. помогите разобраться с копированием.
Программа копирует сама себя из како-либо директории в директорию c:\windows\my_program
char self_dir[MAX_PATH];
char win_dir[MAX_PATH];

GetCurrentDirectory(MAX_PATH, self_dir); //Получаю путь к директории, из которой запущена программа
strcat(self_dir,"\\my_ptogram.exe ");

GetWindowsDirectory(win_dir, MAX_PATH); //Получаю путь к директории Windows
strcat(win_dir,"\\my_program\\my_program.exe");

CopyFile(self_dir, win_dir, false);

если копирование происходит из директории c:\my_program то все идет нормально, но если из c:\my program ( если в имени директории есть пробел)- то файл не копируется. в чем моя ошибка?
пробовал еще вот так
CopyFile("my_program.exe", win_dir, false); - результат тот же.

nitx
30.12.2009, 09:30
-CEREBRUM-, my\ program.exe так будет? Или как то там еще в досе делалось, что 6 букв и ~, ну только непомню что там с пробелами, вроде их вобще не ставили.

PandoraBox, traceroute естественно есть и в *nix. Ну я про то что можно просто скачать исходники :) и посмотреть как все работает.

-CEREBRUM-
30.12.2009, 10:33
nitx, вы имеете в виду, my\ program.exe, что пробез здесь - это спецсимвол и его экранировать \ ??

НTL
30.12.2009, 19:09
Для делфи есть такой хороший сборник: http://delphibasics.ru/ , есть ли что нить подобное для c++?

ASQX
30.12.2009, 19:14
Для делфи есть такой хороший сборник: http://delphibasics.ru/ , есть ли что нить подобное для c++?

тут есть (http://netcode.ru/)

TrueIfrit
01.01.2010, 19:16
Пишу на Си программу которая заполняет одномерный массив случайными числами, а потом этот массив сортирует в порядке от меньшего к большему. Вроде все нормально, но TCC ругается что переменная "c" не объявлена, вот исходник:
#include <stdio.h>
#include <stdlib.h>

int c,i,A[10];

void main()
{
for (i = 0; i <= 9; i++)
{
A[i] = rand();
printf("%d ",A[i]);
}
for (i = 10 - 2; i >= 0; i--)
{
if (A[i] > A[i+1])
{
c = A[i];
A[i] = A[i+1];
A[i+1] = c;
{
}
getch();
}

Retimiled
01.01.2010, 19:45
поменяй местами инициализацию i и с
rand используй с предварительным инициализацией

TrueIfrit
01.01.2010, 19:52
поменяй местами инициализацию i и с
rand используй с предварительным инициализацией
Инициализация я так понял объявление? Если да, то как rand(); можно объявить предварительно, это ведь процедура библиотеки...

eldar85
01.01.2010, 20:59
создал проект на Qt в Qt Creator
добавил в proj.pro
LIBS += -LC:\curl-7.19.7\curl-7.19.7\lib \
-lcurl \
-lcurldll


с указанием пути к скомпиленному курлу

компилируется без ошибок, при запуске приложение сразу завершается с кодом -1073741521.

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

curl_global_init(CURL_GLOBAL_ALL)

без него все ровно. правда не работают другие функции курла

Qt Creator не дает больше никакой информации, курл я качал довольно свежий

что ещё может быть не так?

_antony
01.01.2010, 21:05
Пишу на Си программу которая заполняет одномерный массив случайными числами, а потом этот массив сортирует в порядке от меньшего к большему. Вроде все нормально, но TCC ругается что переменная "c" не объявлена, вот исходник:
#include <stdio.h>
#include <stdlib.h>

int c,i,A[10];

void main()
{
for (i = 0; i <= 9; i++)
{
A[i] = rand();
printf("%d ",A[i]);
}
for (i = 10 - 2; i >= 0; i--)
{
if (A[i] > A[i+1])
{
c = A[i];
A[i] = A[i+1];
A[i+1] = c;
{ <===
}
getch();
}

=)))

Retimiled
01.01.2010, 21:09
Инициализация я так понял объявление? Если да, то как rand(); можно объявить предварительно, это ведь процедура библиотеки...

.. ну к примеру как в МСДН
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}

TrueIfrit
01.01.2010, 22:22
Ох, я вас поблагодорил, но прога только заполняет массив псевдослучайными числами, а сортировать его не хочет...

iGlass
02.01.2010, 12:26
Доброго времени суток!

Хочу начать изучать C++ Скинте пожалуйста ссылки на хороший материал: Уроки, Видео уроки, книги статьи.

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

razb
02.01.2010, 15:30
_https://forum.antichat.ru/thread89681.html

НTL
04.01.2010, 00:48
Вопрос по синтаксису в с++ Builder:

В делфи тип переменной ди и сама переменные указываются до действия то есть перед Begin:

...
...
procedure TForm1.Button1Click(Sender: TObject);
Var
i:integer;
s:string;
//И т.д.
Begin
//Бля бла
end;
...
...


А как объявить переменные на cpp?

razb
04.01.2010, 00:54
мб стоит сначала книжки почитать?

НTL
04.01.2010, 00:57
мб стоит сначала книжки почитать?

Не нашёл ни одной книги в в электронном виде, только сканы, которые невозможно читать...

оlbaneс
04.01.2010, 01:03
Не нашёл ни одной книги в в электронном виде, только сканы, которые невозможно читать...
врешь ты все. книг полно. переменные можно объявлять почти где угодно.
например одну переменную в разных циклах.

1NtR0
04.01.2010, 01:28
Подскажите в чем соль? :)

#include <iostream>
#include <string>
using namespace std;

int main()
{
int arr[21];
for(int c=0;c<20;c++) {
arr.insert(c, c);


}

return 0;
}



Выдает ошибку:

1>c:\documents and settings\admin\??? ?????????\visual studio 2005\projects\222\222\?2.cpp(9) : error C2228: left of '.insert' must have class/struct/union
1> type is 'int [21]'
1>Build log was saved at "file://c:\Documents and Settings\Admin\??? ?????????\Visual Studio 2005\Projects\222\222\Debug\BuildLog.htm"
1>222 - 1 error(s), 0 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

Retimiled
04.01.2010, 01:33
дык он тебе по русски пишет что слева от точки должна быть структура или класс

arr.insert(c, c); .. твоя комманда по сути полный бред

... arr обьявлен как int а у обьектов int char word dword long вообще никаких методов
нет!!

xxx.yyy либо обьект класса xxx вызывает метод yyy(есть еще взятие переменной yyy класса xxx)
либо из структуры xxx берется обьект yyy

razb
04.01.2010, 01:34
arr.insert(c, c);

О_о это где ты такое вычитал/увидел ?
скорее всего предпологается:
arr[c] = c;

1NtR0
04.01.2010, 01:38
arr.insert(c, c);

О_о это где ты такое вычитал/увидел ?
скорее всего предпологается:
arr[c] = c;


string b1 ="qwe";
string b2 = "asd";

b1.insert(3,b2);
вот так работает, вычитал в книге по c++

Вообщем мне нужно в строку добавить символы\слова в цикле, как это сделать? Нужен аналог как в php:

<?php
for($i=0;$i<20;$i++) {
$str.=$i;
}

rudvil
04.01.2010, 01:47
string b1 ="qwe";
string b2 = "asd";

b1.insert(3,b2);
вот так работает, вычитал в книге по c++
В с++ string это класс, а int это тип.

Retimiled
04.01.2010, 01:51
char array[20][255];
strcpy((char *)&(array[0][0]),"bla bla");
strcpy((char *)&(array[1][0]),"111 1");
strcpy((char *)&(array[2][0]),"222222222222");
CString str=CString("");
// выше обьявили и напихали


// тут аналог PHP твоего цикла
for(int i=0;i<20;i++)
str+=CString((char *)&(array[i][0]));

razb
04.01.2010, 01:52
Вообщем мне нужно в строку добавить символы\слова в цикле, как это сделать? Нужен аналог как в php:

<?php
for($i=0;$i<20;$i++) {
$str.=$i;
}
?>


string result;
stringstream ss;

for(int i = 0; i < 20; i++)
{
ss << i;
result += ss.str();
ss.str("");
}

Не забудь проинклудить sstream.

Chrek625
04.01.2010, 07:59
Доброго времени суток.
У меня вот такая ситуация.
Мне нужно произвести пост запрос.
Но сокет возвращает ответ что то с сессией.
Как через сокет в С++ начать сессию на нужном сайте чтобы запрос прошёл от моего пользователя???
Заранее благодарен.

Linkus
04.01.2010, 15:10
сокет возвращает ответ что то с сессией.

телепаты на новогодних каникулах! :) что конкретно возвращается? приведи код!

на нужном сайте чтобы запрос прошёл от моего пользователя???

в смысле от твоего аккаунта на этом сайте?

опиши проблему конкретнее!!

НTL
05.01.2010, 00:26
Как в C++Builder 6 объявить функцию?
В Delphi это делается так:
function Name(i: Integer): string;
begin
Result :=IntToStr(i);
end;

Ins3t
05.01.2010, 02:50
2НTL -->

...
char function(int i)
{
char result[50];
_itoa_s(i,result,10);
return 0;
}
...


OR


...
char function(int i);
...
...
...
char function(int i)
{
char result[50];
_itoa_s(i,result,10);
return 0;
}
...

Retimiled
05.01.2010, 02:54
2 Ins3t

rezult обьявлена как локальная переменная что произойдет при выходе из функции....

... а если 100 тысяч раз вызвать такую функцию (и она по твоему сохраняет в памяти rezult) то что будет утечка памяти в 5 мегов?


:D исправь на глобальную!

Ins3t
05.01.2010, 02:59
2Retimiled -->
Чувак, вопрос был КАК ОБЪЯВИТЬ ФУНКЦИЮ.

Retimiled
05.01.2010, 03:00
2 Ins3t
Чувак вопрос был как это правильно сделать!

Ins3t
05.01.2010, 03:09
Например так:

#include <iostream>
#include <stdlib.h>
using namespace std;
char function(int i, char * result);
int main(int argc, char * argv[])
{
char * result = new char[50];
function(123456, result);
cout<<result;
delete result;
cin.get();
return 0;
}
char function(int i, char * result)
{
itoa(i,result,10);
return 0;
}

Ra$cal
05.01.2010, 03:22
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

string my_func(int x){
stringstream strNumber;
strNumber << x;
return strNumber.str();
}
int main(){
cout << my_func(5);
}

И старайтесь не юзать char* там, где ему не место =)

Retimiled
05.01.2010, 04:03
2 ra$cal

сделай цикл из 4000000 вызовов твоей фукнции и функции
void function(int i, char * result)
{
itoa(i,result,10);
}

... и ты все поймешь! :D только поставь отсчет времени на начало и конец цикла!


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


2 HTL
Как в C++Builder 6 объявить функцию?
В Delphi это делается так:
function Name(i: Integer): string;
begin
Result :=IntToStr(i);
end;

а в Си это делается
itoa(i,Result,10);

:D :D :p

Ra$cal
05.01.2010, 04:16
очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.

anasta
05.01.2010, 05:05
Подскажите плиз....
Как будет выглядит код на Си, который способен просмотреть содержимое папки?

wolmer
05.01.2010, 12:08
Подскажите учебник на подобии "Библия delphi (Михаил Фленов)" но для C++ (кто читал/просматривал учебник "Библия delphi" тот подскажет я так думаю)

KI11obyte
05.01.2010, 12:10
Лучше Страуструпа для первой книги по С++ нет
ее негласно как раз и называют библия С++

Fata1ex
05.01.2010, 14:44
Позволю себе не согласиться.
KI11obyte, неужели первая, книга которую ты прочитал, была Библия? Думаю, нет. Здесь то же самое. Лучше начать с Либерти. А потом уже закреплять Страуструпом. Фленова не читал, так что не знаю, на что похожа его книга, но в качестве первой Страуструп, по-моему, не очень подходит.

#include <iostream>
#include <stdlib.h>
using namespace std;
char function(int i, char * result);
...


Такое мясо из языков ( Разберитесь уж на чем пишите :)

_antony
05.01.2010, 15:29
но вы видимо еще не на этом уровне
А Вы на этом уровне?)))

Ra$cal
05.01.2010, 15:47
(и юзеру наплевать на программиста вместе с его классами если один из параметров страдает)
вы хоть раз писали софт, по размеру от 5-7 тыщ строк? если нет, то я вам подскажу одну вещь - юзеру будет совсем не наплевать на то, как писал программист, зато ему будет наплевать на скорость выполнения функции(поверьте, им и щас наплевать, тратится на функцию 0.0001с или 0.1с). Когда он пришлет вам багрепорт с критической багой, которую нада устранить в кратчайшие сроки, которая может потребовать небольшого перепроектирования какойнить подсистемы - вот тогда вы будете ковыряца в куче char*'чек, матерясь, следя, по какой цепочке вызовов проходят указатели для экономии(о да) 500 байт памяти. Все это уже давно пройдено, и именно это повлияло на создание таких языков, как C++, Java итп.

Советую почитать Фаулера, Макконнелла, Гамму с компанией.
Про скорость выполнения - готов в свободное время на спор написать программку - я и вы. Вы пишите с оптимизацией на скорость, я пишу как обычно. Программы будут идентичны. Даем юзерам и потом спрашиваем - какая написана оптимизированно под скорость, а какая моя. И я могу предсказать ответ пользователей =) И моя будет написана быстрее, а при необходимости добавить новую фичу - добавлена она будет так же быстрее. А для бизнеса это означает, что мой софт займет долю рынка раньше и получит больше клиентов -> больше денег.

PS: сейчас время программиста стоит гораздо дороже времени машины, поэтому и балансируют скоростью разработки и скоростью выполнения. Если совсем все плохо - делают точечную оптимизацию. Кароч спорить бестолку. Читайте книги. Я уже устал от таких рассказов. За вчера меня трое пыталось убедить, что классы - зло. Сезонное чтоли=\

PPS: char* - для языка С, в C++ юзать нада класс string. Это стоит учитывать, когда человек просит помочь с конкретным языком.

Retimiled
05.01.2010, 16:09
вы хоть раз писали софт, по размеру от 5-7 тыщ строк? если нет, то я вам подскажу одну вещь - юзеру будет совсем не наплевать на то, как писал программист, зато ему будет наплевать на скорость выполнения функции(поверьте, им и щас наплевать, тратится на функцию 0.0001с или 0.1с). Когда он пришлет вам багрепорт с критической багой, которую нада устранить в кратчайшие сроки, которая может потребовать небольшого перепроектирования какойнить подсистемы - вот тогда вы будете ковыряца в куче char*'чек, матерясь, следя, по какой цепочке вызовов проходят указатели для экономии(о да) 500 байт памяти. Все это уже давно пройдено, и именно это повлияло на создание таких языков, как C++, Java итп.

Советую почитать Фаулера, Макконнелла, Гамму с компанией.
Про скорость выполнения - готов в свободное время на спор написать программку - я и вы. Вы пишите с оптимизацией на скорость, я пишу как обычно. Программы будут идентичны. Даем юзерам и потом спрашиваем - какая написана оптимизированно под скорость, а какая моя. И я могу предсказать ответ пользователей =) И моя будет написана быстрее, а при необходимости добавить новую фичу - добавлена она будет так же быстрее. А для бизнеса это означает, что мой софт займет долю рынка раньше и получит больше клиентов -> больше денег.

PS: сейчас время программиста стоит гораздо дороже времени машины, поэтому и балансируют скоростью разработки и скоростью выполнения. Если совсем все плохо - делают точечную оптимизацию. Кароч спорить бестолку. Читайте книги. Я уже устал от таких рассказов. За вчера меня трое пыталось убедить, что классы - зло. Сезонное чтоли=\

PPS: char* - для языка С, в C++ юзать нада класс string. Это стоит учитывать, когда человек просит помочь с конкретным языком.

экккк .... вас :D

спорьте с фразой не отвлекаясь на частности
ЗАМЕНЯТЬ itoa РЕАЛИЗАЦИЕЙ НА КЛАССАХ -ГЛУПО если вы не увеличиваете функциональность или скорость !

CString str; // мы тащимся от классов 8)
....
itoa(xx,buf,yy); // тут колбасит ОСОБЫХ людей с голубой кровью КОТОРЫЕ УДАЛИЛИ ИЗ СВОИХ MSDN к MSVC
... ................ //все описания команд типа itoa!!
str=CString(buf); // тут опять тащимся 8-Ь

P.S. Если вы отбросите указатели в С++ то чего вы вообще делаете на форуме посвященном безопасности? Каким образом вы будете работать с областями памяти заданные адресами, каким образом будете писать эксплоиты? Коммерческое программирование конечно хорошо.... но при чем тут античат? Почитайте Рихтера "Проффессиональное программирование в Windows" и поразитесь насколько редко используется С++ в его высокоуровневой компоненте, не сбивайте школьников обьясняя им что С++ , только высокоуровневый , если сами не понимаете всей полноты языка лучше помолчите!

Ra$cal
05.01.2010, 16:11
1 - itoa требует работы в стиле си, т.к. класс string не дает доступа к своему буферу на запись. поэтому itoa в c++ весьма неразумно. для этого дела специально созданы потоки.
2 - если это не узкое место программы - значит проблем нет. прекратите думать за компилятор, предсказывать узкие места по производительности. занимайтесь лучше программированием предметной области. если же это есть место проблемы - тогда да. берем и оптимизируем, убираем потенциальные выделения памяти, лишние операции. все заменяем на простейшие операции. но только после подтверждения факта проблемы. а вы боритесь с проблемой, которую сами придумываете.

удачи. далее спорить влом.

кароч, если пишешь на си - пиши. тока не лезь в с++, а то выглядишь очень глупо.

koder.
06.01.2010, 17:55
Приветствую всех, нуждаюсь в помаши.
Значит учусь по учембнику Джона либерти. Компилятор новый от майкрософт. Среда програмирования С++
В чем суть.
есть исходный тексь программы.
#include <iostream>


int main() {
cout << "Hello World!\n" ;
return 0;
}
Вылезает ошибка:
c:\documents and settings\общий\мои документы\visual studio 2008\projects\hello world\hello world\hello world.cpp(4) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)

Также ещё один исходник:
#include <iostream>
int main(){
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}
Вроде все верно, но при компиляции выдаеться таже ошибка. =(
1>Компиляция... 1>hello World.cpp 1>c:\documents and settings\общий\мои документы\visual studio 2008\projects\hello world\hello world\hello world.cpp(4) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) 1>Журнал построения был сохранен в "file://c:\Documents and Settings\Общий\Мои документы\Visual Studio 2008\Projects\hello world\hello world\Debug\BuildLog.htm" 1>hello world - ошибок 1, предупреждений 0 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Просьба подсказать, что за заголов отсутствует, и куда надо его вписывать.
За все ответы огромное спосибо. ;)

оlbaneс
06.01.2010, 18:00
Приветствую всех, нуждаюсь в помаши.
Значит учусь по учембнику Джона либерти. Компилятор новый от майкрософт. Среда програмирования С++
В чем суть.
есть исходный тексь программы.

Вылезает ошибка:


Также ещё один исходник:

Вроде все верно, но при компиляции выдаеться таже ошибка. =(


Просьба подсказать, что за заголов отсутствует, и куда надо его вписывать.
За все ответы огромное спосибо. ;)

#include "stdafx.h"
#include <iostream>
using namespace std;

int main() {
cout << "tra-lya-lya!" << endl;
cout << "tra-lya-lya!" << endl;
return 0;
}

koder.
06.01.2010, 18:18
#include "stdafx.h"
#include <iostream>
using namespace std;

int main() {
cout << "tra-lya-lya!" << endl;
cout << "tra-lya-lya!" << endl;
return 0;
}
спс большое все получилось... книжка устарела видимо. :) :) :)

Ra$cal
06.01.2010, 18:44
ничего не устарело. читай просто внимательнее, когда ставится ; а когда нет.

koder.
06.01.2010, 22:33
ничего не устарело. читай просто внимательнее, когда ставится ; а когда нет.
Я впринципе все делал правильно, у меня лиш вылезала ошибка
отсутствует заголовок функции
И модератор подсказал using namespace std; =) (чего в книге нету нигде)
Поэтому ; и : тут не причем =)

Ra$cal
06.01.2010, 22:38
до правки в твоем коде было так

#include <iostream>


int main()
;{
cout << "Hello World!\n" ;
return 0;
;}

В данном случае неуместные ; очень даже причем. И компилятор ругается на них. - error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)

koder.
06.01.2010, 22:46
до правки в твоем коде было так

#include <iostream>


int main()
;{
cout << "Hello World!\n" ;
return 0;
;}

В данном случае неуместные ; очень даже причем. И компилятор ругается на них. -
Это я знаю. Понатыкал ; перед { u }, т.к компилятор указывал на ошибки, я в поисках правильного решения проверял все варианты, сюда отписался тоже одним из своих вариантов... =) . Потом исправил мои ошибки, отредактировал =)
Порой в книгах, которые работают с djvureader очень тяжко разгледеть стоит внизу запятая или точка. С этим я думаю ты согласишся =) Как не приближай. :)

draliokero
07.01.2010, 11:04
Как в файле найти все строки, где есть указанное слово, и удалить их?

Fata1ex
07.01.2010, 14:16
draliokero, в этой теме помогают новичкам, а не делают все за них. выкладывай то, что сделал сам, а мы укажем на ошибки

herfleisch
07.01.2010, 16:35
Как в файле найти все строки, где есть указанное слово, и удалить их?

Примерно так:


Открываем файл Src на чтение;
Открываем файл Dst на запись;
пока (не достигнут конец файла)
{
читаем строку из Src;
если ( строка не содержит Слово)
{
записываем строку Dst;
}
}
Закрываем файлы;


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

Ra$cal
07.01.2010, 16:47
koder.
когда я пытаюсь помочь - я отвечаю на суть поста, т.е. на ошибки в коде и сообщения компилятора, а не просто копирую подходящий под условия код. Поэтому старайся если запостил неправильный код - добавить новый код к концу сообщения, но не править исходный. Иначе между твоими сообщениями и ответами форумчан теряется логическая связь.

koder.
07.01.2010, 20:28
Ra$cal
извиняюсь за офтоп, но какойже вы упертый человек.
.Life
в хидерах не пишешь .h, т.е. было #include <iostream.h> стало #include <iostream>
после инклюдов пишем using namaspace std;

все остальное как было актуально, так и есть актуально.
(ВЗЯЛ ОТВЕТ С ДРУГОВО ТОПИКА.)
Всетаки я был прав, сказав, что моя книга устарела. т.к В книге от Джесса либерти в хидерах писался старый вариант.

herfleisch
07.01.2010, 21:38
Ra$cal
извиняюсь за офтоп, но какойже вы упертый человек.

Всетаки я был прав, сказав, что моя книга устарела. т.к В книге от Джесса либерти в хидерах писался старый вариант.

Это не книга устаревшая. В каждом компиляторе по-своему интерпретируются одни и те же команды. Где-то нужно писать <iostream.h>, где-то <iostream>. Книга тут не причём. Вся проблема в том, что разработчики компиляторов так и не пришли к единому стандарту языка C++. А единый стандарт вводят уже не один десяток лет.

На мой взгляд тут из всех выделяются компиляторы Microsoft. Это и не хорошо, и не плохо. Это их право.

Fata1ex
07.01.2010, 21:46
koder., прочитайте начало книги. Я отчетливо помню, что там отдельно оговаривается, почему в текстах книги используется данный вариант и когда применяется другой. Книга НЕ устарела, Ra$cal НЕ ошибается, вы НЕ правы да и автора зовут вовсе НЕ Джон.

STEROID
08.01.2010, 01:13
Допустим, есть ссылка http://****.ru/online_now.php , там же есть меняющийся текст Server Down или Server Up, я создал webbrowser через который текст просматривается, как сделать так чтобы при нажатии на button1, webbrowser обновлялся?

koder.
08.01.2010, 01:38
Приношу свои извинения Ra$cal
Книга от ДЖЕС* Ошибсо :(

Ra$cal
08.01.2010, 02:35
не помешало бы еще куда нить приклеить ссылочку на сей замечательнейший фак. очень много полезной инфы, некоторая даже переведена, если вдруг английский незнаком.

http://www.parashift.com/c++-faq-lite/

herfleisch
08.01.2010, 21:14
Допустим, есть ссылка http://****.ru/online_now.php , там же есть меняющийся текст Server Down или Server Up, я создал webbrowser через который текст просматривается, как сделать так чтобы при нажатии на button1, webbrowser обновлялся?

Среда разработки? Можно больше информации?

Если я правильно понял, то у класса WebBrowser из пространства имён System.Windows.Forms есть метод Refresh(), т.е. примерно так:

/* ... */ Button1_Click(/* аргументы */)
{
webBrowser.Refresh(); // WebBrowser заменить на имя твоего объекта
}

Smapt
08.01.2010, 21:26
Допустим, есть ссылка http://****.ru/online_now.php , там же есть меняющийся текст Server Down или Server Up, я создал webbrowser через который текст просматривается, как сделать так чтобы при нажатии на button1, webbrowser обновлялся?


Delphi? Попробуй WebBrowser1->Refresh;

оlbaneс
08.01.2010, 21:27
koder., прочитайте начало книги. Я отчетливо помню, что там отдельно оговаривается, почему в текстах книги используется данный вариант и когда применяется другой. Книга НЕ устарела, Ra$cal НЕ ошибается, вы НЕ правы да и автора зовут вовсе НЕ Джон.
ну чтобы в вижуал студии не писать постоянно пространство имен std:
сделали чтоб сразу обозначить using namespace std;

cupper
09.01.2010, 23:06
что выведет программа ?

#include <iostream>
using namespace std;

int main(){
int p=1;
int r=2;
int q = (p+r)/2;
cout<<q<<endl;
}


а теперь не поленились и скомпелировали это и написали сюда что непосредственно вывелось. Это не флуд, не спам, не флешмоб, это реальный вопрос.

PS. я вот был уверен что это выдаст мне 2

herfleisch
09.01.2010, 23:10
что выведет программа ?

#include <iostream>
using namespace std;

int main(){
int p=1;
int r=2;
int q = (p+r)/2;
cout<<q<<endl;
}


а теперь не поленились и скомпелировали это и написали сюда что непосредственно вывелось. Это не флуд, не спам, не флешмоб, это реальный вопрос.

Выведет единицу. Т.к. int разделить на int получится int. Не компилировал. Помню, говорили об этом на первом курсе университета.

Чтобы получить 1.5, нужно написать так:

...
int p=1;
int r = 2;

float q = (p+r)/(float)2;
...
Я прав?

Double2
09.01.2010, 23:19
Такая вот проблема. Совсем недавно, буквально вчера, начал учить С++. Решил написать небольшую прогу. Собственно вот код.
#include <iostream>
int main()
{
int a, b, c;
m: std::cout << "Введите первое число \n";
std::cin >> a;
std::cout << "Введите второе число \n";
std::cin >> b;
c=a+b;
if(a!=0 and b!=0)
{
std::cout << "Сумма a и b =";
std::cout << c;
}
else
{
std::cout << "Какое-то из чисел равно нулю! Введите другие числа!";
goto m;
}
return 0;
}


При запуске, ругается на 12 строку(это If) и выдает ошибку
"untitled1.cpp": E2377 If statement missing ) in function main() at line 10

Я читал, что это из-за того, что компилятор не определяет закрывающую скобку, но она на месте! Если что, юзаю Borland C++BuilderX

herfleisch
09.01.2010, 23:21
Такая вот проблема. Совсем недавно, буквально вчера, начал учить С++. Решил написать небольшую прогу. Собственно вот код.
#include <iostream>
int main()
{
int a, b, c;
m: std::cout << "Введите первое число \n";
std::cin >> a;
std::cout << "Введите второе число \n";
std::cin >> b;
c=a+b;
if(a!=0 and b!=0)
{
std::cout << "Сумма a и b =";
std::cout << c;
}
else
{
std::cout << "Какое-то из чисел равно нулю! Введите другие числа!";
goto m;
}
return 0;
}


При запуске, ругается на 12 строку(это If) и выдает ошибку
"untitled1.cpp": E2377 If statement missing ) in function main() at line 10

Я читал, что это из-за того, что компилятор не определяет закрывающую скобку, но она на месте! Если что, юзаю Borland C++BuilderX

Напиши так: if((a!=0) && (b!=0))

Это тебе те паскаль

Double2
09.01.2010, 23:22
Оу... Спасибо :)

herfleisch
09.01.2010, 23:26
Оу... Спасибо :)
Если уж начал учить C/C++, отвыкай от меток и операторов goto. Они - признак плохого тона. Онотоле таке не одобряе )))

Double2
09.01.2010, 23:28
:) А чем можно заменить goto?

cupper
09.01.2010, 23:30
[QUOTE=herfleisch]Выведет единицу. Т.к. int разделить на int получится int. Не компилировал. Помню, говорили об этом на первом курсе университета.
[/qoute]
Вот какого хера выведет еденицу, ведь блин всегда при делении с остатком если это int округлялось в большую сторону, а щас на те и 1.

PS. 1.5 мне ненадо получать %)

Double2
09.01.2010, 23:31
Если не ошибаюсь, то округляется тогда, когда после точки идет число больше 5. Извиняюсь, если не прав

herfleisch
09.01.2010, 23:34
[QUOTE=herfleisch]Выведет единицу. Т.к. int разделить на int получится int. Не компилировал. Помню, говорили об этом на первом курсе университета.
[/qoute]
Вот какого хера выведет еденицу, ведь блин всегда при делении с остатком если это int округлялось в большую сторону, а щас на те и 1.

PS. 1.5 мне ненадо получать %)
Такого х..ра, что при делении int на int всю жизнь дробная часть отбрасывалась )

herfleisch
09.01.2010, 23:34
Если не ошибаюсь, то округляется тогда, когда после точки идет число больше 5. Извиняюсь, если не прав
Не прав )

:) А чем можно заменить goto?
В Вашем случае я бы заменил на цикл while() {}

Double2
09.01.2010, 23:39
А почему while? Вроде бы это повтор кода пока условие исполняется... Не будет ли этот цикл бесконечным?

herfleisch
09.01.2010, 23:41
А почему while? Вроде бы это повтор кода пока условие исполняется... Не будет ли этот цикл бесконечным?
Ну что-то вроде "Выполнять какой-нибудь кусок кода, пока числа не будут введены верно".Хотя, признаться честно, я твой код смотрел по диагонали )))

Smapt
10.01.2010, 00:24
Такая вот проблема. Совсем недавно, буквально вчера, начал учить С++. Решил написать небольшую прогу. Собственно вот код.
#include <iostream>
int main()
{
int a, b, c;
m: std::cout << "Введите первое число \n";
std::cin >> a;
std::cout << "Введите второе число \n";
std::cin >> b;
c=a+b;
if(a!=0 and b!=0)
{
std::cout << "Сумма a и b =";
std::cout << c;
}
else
{
std::cout << "Какое-то из чисел равно нулю! Введите другие числа!";
goto m;
}
return 0;
}


При запуске, ругается на 12 строку(это If) и выдает ошибку
"untitled1.cpp": E2377 If statement missing ) in function main() at line 10

Я читал, что это из-за того, что компилятор не определяет закрывающую скобку, но она на месте! Если что, юзаю Borland C++BuilderX


do
{
int a, b, c;
std::cout << "Введите первое число \n";
std::cin >> a;
std::cout << "Введите второе число \n";
std::cin >> b;
c=a+b;
if(a!=0 && b!=0)
{
std::cout << "Сумма a и b =";
std::cout << c;
}
else
{
std::cout << "Какое-то из чисел равно нулю! Введите другие числа!";
}

}while(a==0 && b==0)


попробуй так)

Double2
10.01.2010, 01:07
Ок, попробую, спасибо :)

herfleisch
10.01.2010, 01:09
do
{
int a, b, c;
std::cout << "Введите первое число \n";
std::cin >> a;
std::cout << "Введите второе число \n";
std::cin >> b;
c=a+b;
if(a!=0 && b!=0)
{
std::cout << "Сумма a и b =";
std::cout << c;
}
else
{
std::cout << "Какое-то из чисел равно нулю! Введите другие числа!";
}

}while(a==0 && b==0)


попробуй так)

Объявления переменных a, b, c вынести за пределы цикла. И в условии цикла заменить && на ||. Не путайте людей, изучающих С++ второй день ))

[Life]
10.01.2010, 01:11
очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.

Ra$cal
10.01.2010, 01:14
"(C) Ra$cal" в конце забыл

Smapt
10.01.2010, 01:16
Объявления переменных a, b, c вынести за пределы цикла. И в условии цикла заменить && на ||. Не путайте людей, изучающих С++ второй день ))


Ну я примерно написал... а вообще ты прав конечно)

herfleisch
10.01.2010, 01:20
']очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.
А мне лень вразумлять о том, что человек, ИЗУЧАЮЩИЙ С++, должен знать о более оптимальных алгоритмах и приёмах. По-моему преимущество С++, заключающееся в возможности доступа к аппаратным средствам на уровне языка ассемблера, ещё никто не отменял. Иначе, может быть есть смысл фигачить кучи "высокоуровневых" программ на Delphi?

Человек ИЗУЧАЕТ С++. Вдумайтесь в смысл этих слов. Я вот сейчас очень доволен тем, что мои преподаватели по программированию не стали с ранних курсов загружать меня классами и объектами, а начали с самых основ.

К тому же, раз уж Вы заговорили о том, что С++ создан для облегчения жизни программисту, заявлю: метки только ухудшают понимание программы! Размывают чёткий алгоритм и структуру! А про оптимизацию, товарищ, я даже и не заикнулся.

[Life], таких как Вы послушать, так зарезервированных слов, как оказывается, не стоит знать и понимать. "Главное - классы! Рабочие классы, батенька!"

Krist_ALL
10.01.2010, 01:25
1. Скажите что хранит переменная а
int& a=b; а ссылается на б,но что хранит а? Адрес? Вроде нет...

2. Show (int& a) {
... } что поступает на вход в функцию? Адрес а? Копия значения? Непойму никак...

3. Написано что нельзя сравнивать значения ссылой,а как же быть если это надо сделать?

4. Зачем придуманны ссылки когда есть указатели?

5. Если массив передается как аргумент в функцию ,то он передается по ссылке или передается адрес первого элемента?

herfleisch
10.01.2010, 01:30
1. Скажите что хранит переменная а
int& a=b; а ссылается на б,но что хранит а? Адрес? Вроде нет...

2. Show (int& a) {
... } что поступает на вход в функцию? Адрес а? Копия значения? Непойму никак...

3. Написано что нельзя сравнивать значения ссылой,а как же быть если это надо сделать?

4. Зачем придуманны ссылки когда есть указатели?

5. Если массив передается как аргумент в функцию ,то он передается по ссылке или передается адрес первого элемента?

Указатель - это адрес памяти, если переходить на делетанский язык. А ссылки - это, так сказать, псевдонимы. Используются, в основном, для передачи в функции вместо указателей.

Т.е., а будет хранить 1, как и б. Отсюда и отталкиваетесь.

Книга Б.Страуструпа по С++ в помощь. Супер-вещь!

Krist_ALL
10.01.2010, 01:38
Часто ли юзаются/нужны соединения?
Оч похожи соединения на структуры..

Ra$cal
10.01.2010, 01:38
жжоте товарищи. первое - цитата моя. несколькими страницами раньше написана, и для другого контекста. второе - тут классы просто некуда приписать, так что все herfleisch подсказывал правильно. третье - ставьте копирайты етиж их налево

Krist_ALL
1 - ссылку на b. по сути типа указатель на блок памяти переменной b. только читать a можно без разыменовывания. вот и вся разница. т.е. пишем a = 1 => b тоже = 1. пишем b = 5 => a тоже равно 5
2 - аналогично с первым случаем. адрес переменной, с которым можно работать без * и ->.
3 -
int main(){
int a = 5;
int b = 7;
int &c = a;
int &d = b;
cout << ((c == a) ? "true\n" : "false\n");
}
4 - для удобства. постепенно поймешь, когда придется писать много кода с классами. со ссылкой тебе не нужно держать в памяти какая переменная указатель, а какая ссылка. везде ставишь точку и все. ну и как параметр, в который возвращает функция знчение используется. когда функция должна вернуть больше одной величины.
5 - массив передается по умолчанию как указатель. можно передать массив по ссылке.

не соединения а объединения. юзаются весьма редко.

Irdis
10.01.2010, 01:47
del

Krist_ALL
10.01.2010, 02:05
4. Какую точку ставить?О.О

а чем отличается
s(char a[]) {
... }
и
s(char* a[]) {
...}
?
Второй код писать когда из функции я буду изменять массив?
Тогда надо передать массив так s(&a) да?
Или..
Вообще написано что если в функцию передан массив ,то когда в функции делается ++ ,то с++ просто сдвигает на нужную ячейку и все. => в функцию передается адрес начала массива.
Когда массив из цифр,то чтоб передать массив в функцию,надо еще и передать ск элементов в нем,а когда массив чар из букв,то не нада размер т.К. Функция определит конец по нул байту..
Блин ппц с этими указателями.. После пхп с++ оч сложно учить.

Ra$cal
10.01.2010, 02:28
не на том внимание заостряешь. массивы по ссылке передавать смысл есть только если тебе нужно в переменную вернуть массив. вообще используют std::vector, чтобы нагляднее все было.

s(char a[]) {
... }
и
s(char* a[]) {
...}

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

по поводу инкремента и прочего - вот кто тебе мешает сделать проект и проверить все глазами и руками. делаешь массив. передаешь его в функцию. там инкрементишь. выходишь из функции и смотришь, изменилось ли значение исходной переменной, которую передал.

void s(char* a){
a++;
*a = '_';
}

void s2(char* &a){
a++; // очень плохо ибо delete не сработает -> утечка памяти
*a = '_';
}

void s3(char* &a){
delete [] a; // иначе утечка памяти
a = new char [strlen("foobar") + 1];
strcpy(a, "foobar");
}
int main(){
char* a = new char [5];
strcpy(a, "test");
s3(a);
cout << a;
}

PS: для уменьшения бардака есть такое слово как typedef. Определив char* как pchar ты упростишь читаемость кода. s(pchar &a) - ссылка на массив символов

Krist_ALL
10.01.2010, 02:37
Ты еще больше меня запутал( напиши в аську мне плз.

Ra$cal
10.01.2010, 02:49
не, по асе не консультирую. ибо вместо того, чтобы попробовать учиться, писать код, компилить, наблюдать за работой, понимать, предпочитают сразу спрашивать. в этом плане форум самое то. я те пример кода привел. бери его и дебаж до просветления. будут доп вопросы по поводу конкретного кода - пиши на форум.

Fata1ex
10.01.2010, 13:17
охохох вот он ваш php

herfleisch
10.01.2010, 13:48
Ещё раз советую Б. Страуструпа )))

cupper
10.01.2010, 14:30
пытаюсь сделать алгоритм бинарного поиска, но такой чтобы при входе:
A - массив, p - индекс первого элемента, r - индекс последнего элемента, число x,
На выходе получить не позицию элемента равного х, а позицию элемента q удовлетворяющего условию A[q-1] < x <= A[q].

Ну и собсно путаюсь, и не как немогу ничего вразумительного сделать.
Ps. именно по принцыпу бинарного поиска.

Krist_ALL
10.01.2010, 14:56
Да мне не лень компилить,пока прост нету возможности компилить.

herfleisch
10.01.2010, 15:10
пытаюсь сделать алгоритм бинарного поиска, но такой чтобы при входе:
A - массив, p - индекс первого элемента, r - индекс последнего элемента, число x,
На выходе получить не позицию элемента равного х, а позицию элемента q удовлетворяющего условию A[q-1] < x <= A[q].

Ну и собсно путаюсь, и не как немогу ничего вразумительного сделать.
Ps. именно по принцыпу бинарного поиска.
Исходник в студию )

Ra$cal
10.01.2010, 16:13
Да мне не лень компилить,пока прост нету возможности компилить.
Тогда ты долго будешь учить с++. Обычный алгоритм таков - читаешь главу, делаешь программу согласно главе, дебажишь до понимания. Потом начинаешь менять этот исходник чтобы понять вариации изменения кода и поведения. И так тестишь пока есть вопросы. Потом берешь и читаешь следующую главу.
Я сам не так давно таким образом с Qt возился. Книжка без практики, так же как и практика без книжки - пустая трата времени.

cupper
10.01.2010, 18:21
Исходник в студию )
какие исходники, я даже алгоритм не могу продумать. Я сосбно и просил помочь именно с составлением алгоритма

Fata1ex
10.01.2010, 18:54
Не очень понятно причем тут бинарный поиск. Массив из случайных чисел или упорядоченный?

cupper
10.01.2010, 19:13
ну бинарный поиск работает только при упорядоченном массиве, после прогулки на улице, написал вот это

int bin_find_mm(int *, int, int ,int, int);
/*
* Рекурсивная функция поиска позиции q, такой что
* A[q-1] < x < A[q]
* возвращает q
*/

int main(){
int mas[7]={1,4,6,7,10,16,23};
cout<<bin_find_mm(mas, 0, 6, 24, 7)<<endl;
}

int bin_find_mm(int *A, int p, int r, int x, int minq){
int temp = minq;
if (p <= r){
int q = (p+r)/2;
if (x < A[q])
temp = bin_find_mm(A, p, q-1, x, q);
else if (x > A[q])
temp = bin_find_mm(A, q+1, r, x, minq);
else
return q;
}
if (temp < minq)
return temp;
else
return minq;

}

проверил несколько раз, на листочке посчитал ручками, вроде работает. Может можно лучше сделать ?

cupper
10.01.2010, 21:35
И еще, как время в милисекундах получать, чтобы можно было засекать время работы функций
делаю так

int timeBeg = time(NULL);
....
int totalTime = time(NULL) - timeBeg;
cout<<"total time to sort = "<<totalTime<<endl;

но секунда величина очень большая %)

PS. кодю в лине, WinAPI нету.
PPS. проблема решена

#include <ctime>
...
clock_t t0 = clock();
//что-нить делаем
clock_t t1 = clock();
cout << "time: " << (double)(t1 - t0) / CLOCKS_PER_SEC << endl;

rudvil
10.01.2010, 21:51
И еще, как время в милисекундах получать, чтобы можно было засекать время работы функций
Я этим пользуюсь. (http://www.dreamincode.net/forums/index.php?showtopic=24685&view=findpost&p=242559)

Double2
11.01.2010, 13:51
А как сделать так, чтобы при решении какого-нибудь уравнения(типа x-5+y+2=52-36) все числа с переменными(x и y например) оставались слева, а все остальные перемещались за знак равно вправо и при этом меняли знак с + на - и наоборот? К примеру чтобы из x-5+y+2=52-36 получилось x+y=52-36+5

wolmer
11.01.2010, 21:57
Как принять ответ с помощью winsock (TCP), хочу чтобы у меня вместо квадратиков были русские буквы в принятом ответе!
(речь идет о C++)

herfleisch
11.01.2010, 22:05
Как принять ответ с помощью winsock (TCP), хочу чтобы у меня вместо квадратиков были русские буквы в принятом ответе!
Либо с сервера отправлять русские буквы вместо квадратиков, либо дебажить и смотреть куда смотря указатели, если речь идёт о С++.

wolmer
12.01.2010, 21:05
Как узнать за сколько выполнилась та или иная функция в C++?

Fata1ex
12.01.2010, 21:11
Глазки наверх подними ага

Double2
13.01.2010, 01:20
Вопщем. Как сделать так, чтобы числа перемещались влево, а x и у и их коэффициенты оставались слева, но числа при перемещении меняли знак?

Ra$cal
13.01.2010, 01:36
для начала написать парсер

herfleisch
13.01.2010, 03:26
Для начала нужно забыть о школьных методах решения уравнений.

Ann$
13.01.2010, 18:05
Моделирование обхода препятствия роботом.

Fata1ex
13.01.2010, 18:49
Пиши свои наработки, мы доскажем

Ann$
13.01.2010, 20:25
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <time.h>

unsigned char far *screen = MK_FP (0xA000,0);

void SetMode (int Mode)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = Mode;
int86 (0x10, &regs, &regs);
}

void ClearScreen (void)
{
unsigned i;
for (i=0; i<64000l; i++) screen [i]=0;
}

void drawBody (int x, int y, unsigned char *draw)
{
int x1,y1;

x += 2;
y += 3;

for (y1=0;y1<14;y1++)
for (x1=0;x1<17;x1++)
if (draw[y1*17+x1] !=0) screen[320*(y1+y)+x1+x] = draw[y1*17+x1];
}


void clearBody (int x, int y)
{
int x1,y1;

x += 2;
y += 3;

for (y1=0;y1<14;y1++)
for (x1=0;x1<17;x1++)
screen[320*(y1+y)+x1+x] = 0;
}


void drawObstacle (int x, int y, unsigned char *draw)
{
int x1,y1;

x += 4;
y += 5;

for (y1=0;y1<10;y1++)
for (x1=0;x1<12;x1++)
if (draw[y1*12+x1] !=0) screen[320*(y1+y)+x1+x] = draw[y1*12+x1];
}

void WaitSync(void)
{
while(inportb(0x3DA) &0x8);
while(!(inportb(0x3Da)&0x8));
}


void drawLine1 (int x)
{
int y;
for (y=0;y<=200;y++)
screen[320*y+x] = 8;
}

void drawLine2 (int y)
{
int x;
for (x=0;x<=320;x++)
screen[320*y+x] = 8;
}

unsigned char robot[17*14] = {
0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,
0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,
1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1
};

unsigned char obstacle[12*10] = {
8,8,8,8,8,8,8,8,8,8,8,8,
8,3,1,1,1,1,1,1,1,1,3,8,
8,1,3,1,1,1,1,1,1,3,1,8,
8,1,1,3,1,1,1,1,3,1,1,8,
8,1,1,1,3,3,3,3,1,1,1,8,
8,1,1,1,3,3,3,3,1,1,1,8,
8,1,1,3,1,1,1,1,3,1,1,8,
8,1,3,1,1,1,1,1,1,3,1,8,
8,3,1,1,1,1,1,1,1,1,3,8,
8,8,8,8,8,8,8,8,8,8,8,8
};


void goNow(int go, int *kx, int *ky ) {

int x = *kx;
int y = *ky;


if( go == 1) y--;
else if( go == 2) {y--; x++;}
else if( go == 3) {x++;}
else if( go == 4) {x++; y++;}
else if( go == 5) {y++;}
else if( go == 6) {y++; x--;}
else if( go == 7) {x--;}
else if( go == 8) {x--; y--;}

*kx = x;
*ky = y;
}

void main ()
{
int x, y, i = 1;
int up = 0;
int r_max = 0;
int kx = 0, ky = 0;
int r = 0;
int go = 0;
// все шаги
int xs[1000];
int xy[1000];
//препятствия
int ss[161];
int xx;
long j;
time_t t;

SetMode (0x13);

srand((unsigned) time(&t) );
r = rand() % 1000000;


//for(x=0; x <= 320; x += 20) drawLine1(x);
//for(y=0; y <= 200; y += 20) drawLine2(y);

for (xx=0; xx < 160; xx++) ss[i] = 0;

xs[0] = 0;
xy[0] = 0;

while (kx != 15 || ky != 9) {



srand(i * i * r * r);

if (ky == 0 && kx == 0) { up = 2; r_max = 3; }
else if (ky == 0 && kx == 15) { up = 4; r_max = 2; }
else if (ky == 9 && kx == 15) { up = 1; r_max = 2; }

else {

if (ky == 0) {up = 2; r_max = 4;}
else if (kx == 0) {up = 1; r_max = 4;}
else if (kx == 15) {up = 4; r_max = 2;}
else if (ky == 9) {up = 0; r_max = 3;}
else { up = 1; r_max = 5;}

}

go = (rand() % (r_max - 1) ) + up + 1;


goNow( go, &kx, &ky );


xs[i] = kx;
xy[i] = ky;

ss[ky*16+kx] = 1;



i++;
}



for (xx=0; xx < 160; xx++) {
if (ss[xx] == 0) {
srand(r * r * xx * xx);
go = rand() % 5;
if (go > 1) drawObstacle( (xx % 16) * 20, (xx / 16) * 20, obstacle);
}
}

for(xx = 0 ; xx < i; xx++) {
drawBody( xs[xx]*20, xy[xx]*20, robot);

for (j = 0; j < 200000000; j++) {}
clearBody(xs[xx]*20, xy[xx]*20);
}

SetMode(3);



}

Вот только я незнаю правильно или нет

aydar
13.01.2010, 22:50
добрый день, подскажите пожалуйста библиотеки для работы с webom, и примеры программ или faq.
Просто надо сделать такую программку, каторая проверяет url (url в текстовом файле), на наличие в html коде данной страницы (вот пример http://www.flamberg.pl/forum/memberlist.php) тут надо проверить если в html коде данная строка profile.php?mode=email&u если есть, то удалить из файла, или может кто-нибудь для примера написать данное прогу?

BrainDeaD
13.01.2010, 23:56
добрый день, подскажите пожалуйста библиотеки для работы с webom, и примеры программ или faq.

для какого языка? мы не екстрасенсы))

Ra$cal
14.01.2010, 02:58
зачем вообще библиотека. поиск и замена подстроки в строке уже требует доп библиотек? причем в любом языке...

Retimiled
14.01.2010, 13:34
2 Ann$

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

herfleisch
14.01.2010, 15:24
А можно попросить тех, кто желает получить помощь в составлении алгоритма?

Уважаемые дамы и господа!

Если вы желаете получить ответы на свои вопросы, то задайте вопрос и предоставьте необходимую информацию так, чтобы у знающих людей была возможность ответить вам.

Не в коем случае не допускайте по 50 синтаксических, грамматических, пунктуационных и прочих ошибок. Такие обращения очень сложно читаются!!! Очень сложно!!! И, скорее всего, ваш вопрос останется без внимания определённого процента посетителей.

Если выкладываете исходник - выкладывайте ту часть, которая имеет отношение к вопросу. Не ленитесь отсеивать ненужную информацию! Каждый человек ценит своё время и ни у кого нет желания разбирать громоздкий код в несколько сот строк!

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

Спасибо за внимание. Надеюсь, моя просьба не останется незамеченной.

aydar
14.01.2010, 15:55
язык с++, поиск и замена не требует никаких библиотек, ну как мне искать подстроку, если файл (html страница) находится в интернети?

herfleisch
14.01.2010, 15:59
язык с++, поиск и замена не требует никаких библиотек, ну как мне искать подстроку, если файл (html страница) находится в интернети?
А удалять подстроку Вы тоже хотите прямо "в интернети"???

aydar
14.01.2010, 16:11
зачем мне удалять подстроку?
Дан файл (txt) такого вида
http://forum.dmkproject.pl/memberlist.php?
http://www.design.ed.info.pl/forum/memberlist.php
http://www.procinema.pl/mediatravel/forum/phpBB-2.0.22-PL/phpBB2/forum/memberlist.php
Программа должна заходить на них и если на страницы присутствует эта строка profile.php?mode=email&u, удалить из текстового файла данный url.

BrainDeaD
14.01.2010, 21:49
libcurl для закачки файла http://curl.haxx.se/libcurl/
здесь библотека, чтоб пропарсить html http://www.codeproject.com/KB/library/GomzyHTMLReader.aspx
написать условие для удаления строки из текста, я надеюсь, ты сумеешь.

H1N1
15.01.2010, 01:36
Как системно отслеживать что в папке появился новый файл?

Скажем у вас есть папка(папки), и вот этой папкой пользуются многа народа (и по сети и так), скажем вам нужно чтобы в папку можно было скопировать только файлы типа doc и txt, все остальные типы файлов скопировать туда было нельзя, что делать?
Под рукой у вас тока Dev C++, и ось винда.
И да, характеристики компа сильно ограничены, предположим пень 3.

aydar
15.01.2010, 18:37
libcurl для закачки файла http://curl.haxx.se/libcurl/
здесь библотека, чтоб пропарсить html http://www.codeproject.com/KB/library/GomzyHTMLReader.aspx
написать условие для удаления строки из текста, я надеюсь, ты сумеешь.

Слушай можешь со мной связаться или оставь свою асю есть парочка вопросов. моя ася 267-683-881

aydar
15.01.2010, 19:11
Помоги плиз с установкой библиотеки..

isqad88
18.01.2010, 13:52
Как получить список всех дисков компьютера и узнать какой из них HDD а какой CD-ROM (DVD)?

POS_troi
18.01.2010, 14:45
Все поклоняются гуглу но пользоваться им не хотят

http://www.cyberforum.ru/visual-cpp/thread24216.html

2H1N1

Периодически Парси файлы в папке по расширению и все что левое удаляй (чтобы не заморачиваться с организацией циклов, можно воспользоваться "Расписание зада"). Это все можно сделать с помощью батника.

2aydar

Куда? какая среда? на MVC я так и не заставил CURL толком работать

isqad88
18.01.2010, 15:22
Вот сам разобрался уже ))

#include <windows.h>

#include <iostream>


using namespace std;


int main()
{

char drive[] = {"A:"};


DWORD drive_mask = GetLogicalDrives();
while(drive_mask)
{
if(drive_mask & 1)
{
cout<<drive<<"\n";

switch(GetDriveType(drive))
{
case DRIVE_UNKNOWN: cout<<"Drive unknown\n"; break;
case DRIVE_NO_ROOT_DIR: cout<<"No root\n"; break;
case DRIVE_REMOVABLE: cout<<"DRIVE_REMOVABLE\n"; break;
case DRIVE_FIXED: cout<<"DRIVE_FIXED\n"; break;
case DRIVE_REMOTE: cout<<"DRIVE_REMOTE\n"; break;
case DRIVE_CDROM: cout<<"DRIVE_CDROM\n"; break;
case DRIVE_RAMDISK: cout<<"RAMDISK\n"; break;
};
}
++drive[0];
drive_mask >>= 1;
}
return (0);
}

Только вот теперь вопрос:
char drive[] = {"A:"}; - здесь как я понял определили символьный массив, и первый элемент его равен "A:"

++drive[0]; - а после этого автоматически продолжается по алфавиту?? или что это вообще

zeppe1in
20.01.2010, 14:49
первый элемент его равен "A",
++drive[0]; прибавим к нему 1 и получим B

m0Hze
20.01.2010, 16:18
C++ Builder.
Собственно, обстоятельства заставили сесть за эту штуку.И тут же возник вопрос,как осуществляется работа с сетью? Загуглил на тему,нашел множество упоминаний про компонент idHTTP.А теперь собственно вопросы.Так как на дельфи я писал последний раз года два назад,и это был калькулятор,то никаких компонентов использовать не приходилось.И соответствнно,где их брать - я понятия не имею.Как подключить этот самый idHTTP к C++ Builder? Встроеный ли он? Откуда его скачать,и как подключить к коду? Я так понял,работа на Builder, сводиться к объектам и классам,тоесть и вызов будет примерно такой:
iddHTTP->UserAgent = 'Bla bla';
Простая попытка вызова вот так вот,этого самого компонента,привела к ошибки компилятора.так что мне нужен совет.В сети таких ответов нет,ну или я их не на гуглил.Спассбо большое.

m0Hze
20.01.2010, 17:03
C++ Builder.
Собственно, обстоятельства заставили сесть за эту штуку.И тут же возник вопрос,как осуществляется работа с сетью? Загуглил на тему,нашел множество упоминаний про компонент idHTTP.А теперь собственно вопросы.Так как на дельфи я писал последний раз года два назад,и это был калькулятор,то никаких компонентов использовать не приходилось.И соответствнно,где их брать - я понятия не имею.Как подключить этот самый idHTTP к C++ Builder? Встроеный ли он? Откуда его скачать,и как подключить к коду? Я так понял,работа на Builder, сводиться к объектам и классам,тоесть и вызов будет примерно такой:
iddHTTP->UserAgent = 'Bla bla';
Простая попытка вызова вот так вот,этого самого компонента,привела к ошибки компилятора.так что мне нужен совет.В сети таких ответов нет,ну или я их не на гуглил.Спассбо большое.
Нашел тематический форум,там я нашел ответ,правда немного иной,но переделал под себя,и все заработало.Удивительно.
Так вот новый вопрос.Наипростейший код,вешаем на кнопку по клику событие:

TIdHTTP *http = new TIdHTTP(NULL);
Label1->Caption = http->Get("http://yandex.ru");

и все бы хорошо,но тыкаем на кнопку,и получаем ошибку.Мол, "302 moved permanently!".А вопрос следующий,как не получать ошибку,а получить непосредственно содержимое страницы,как это работает при получении www.yandex.ru?
То есть, в лейбл должно попасть примрно следующее:

302 Moved

И никаких ошибок.Работаю с буилдером как вы могли понять в первый раз.

m0Hze
20.01.2010, 19:19
Нашел тематический форум,там я нашел ответ,правда немного иной,но переделал под себя,и все заработало.Удивительно.
Так вот новый вопрос.Наипростейший код,вешаем на кнопку по клику событие:

TIdHTTP *http = new TIdHTTP(NULL);
Label1->Caption = http->Get("http://yandex.ru");

и все бы хорошо,но тыкаем на кнопку,и получаем ошибку.Мол, "302 moved permanently!".А вопрос следующий,как не получать ошибку,а получить непосредственно содержимое страницы,как это работает при получении www.yandex.ru?
То есть, в лейбл должно попасть примрно следующее:

302 Moved

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

while(...) read = fread(sock,1024);

Спасибо.

cupper
20.01.2010, 21:45
Что произойдет если сделать так
A - указатель на динамически созданный массив размерности X
A = (int*) realloc(A, Y*sizeof(int));
Если Y < X.
Уменьшиться размер массива и затрется последний элемент (что собсно и нужно) или что то неопределенное ?

Вот то что я хочу сделать

int main(){
int *mas = new int [5];
int mas1[]={1,2,3,4,5};
for (int i=0; i<5; i++)
mas[i] = mas1[i];
mas = (int*) realloc(mas, 3*sizeof(int));
for (int i=0; i<5; i++)
cout<<mas[i]<<" ";
cout<<endl;
}

Оно выводит 1 2 3 4 5
Но я не могу проверить выводит оно это потому что:
1. Память не успела затереться но за границу массива мы уже вышли
2. Граница массива осталась на прежнем месте

Ra$cal
20.01.2010, 22:59
realloc не предназначен для перевыделения памяти, выделенной new.

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

m0Hze
20.01.2010, 23:25
Программисты! Ответьте на вопросы выше :)

cupper
20.01.2010, 23:39
realloc не предназначен для перевыделения памяти, выделенной new.

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
неповеришь, но именно от тудова и взял ее. У меня туговато с англ, если не для изменения размера массива то, пилять, для чего ж она ?

zeppe1in
21.01.2010, 01:39
думаю сделать класс,
в котором будет char переменной длины от 1 до 10. и я буду создавать массив из этого класса. тоесть будет много new char[1-10]. это нормально? или может есть другие варианты.
и потом как лучше будет заполнять этот char? меня смущает memcpy(..1)

rudvil
21.01.2010, 01:45
неповеришь, но именно от тудова и взял ее. У меня туговато с англ, если не для изменения размера массива то, пилять, для чего ж она ?
void * realloc ( void * ptr, size_t size );
ptr - Pointer to a memory block previously allocated with malloc.
ptr - Указатель на блок памяти созданный с помощью "malloc"

Ra$cal
21.01.2010, 02:47
zeppe1in
зачем? постановку задачи то пиши. а то реверсить чужое мышление - задача весьма нетривиальная. не то что программы писать.

zeppe1in
21.01.2010, 03:35
zeppe1in
зачем? постановку задачи то пиши. а то реверсить чужое мышление - задача весьма нетривиальная. не то что программы писать.
ну вообще дизасмлю ИЛ код. вот собственно подумал сделать класс где будет хранится опкод, тип опкода, ну и всё такое, что бы дальше мне удобно было работать со всем этим.

Или наверно лучше сделать,просто массив, а в нём адрес опкода, его размер, и тип.

Hiro Protagonist
21.01.2010, 07:37
2zeppe1in
если все делаешь на классах то и опкод храни как класс
если нет -> то массив структур. Придерживайся единообразия )

m0Hze
21.01.2010, 07:51
Блин,ребят) Обстоятельства требуют))
Ответьте на вопросы выше,а то я кончился уже =(

zeppe1in
21.01.2010, 13:58
2zeppe1in
если все делаешь на классах то и опкод храни как класс
если нет -> то массив структур. Придерживайся единообразия )
вся проблема в том, что только изучаю с++, и поэтому делаю как получится).
я думаю что с массивом структур(адрес,размер) будет лучше чем выделять память для каждого опкода.
пс:вот теперь думаю, может массив в класс засунуть.)

cupper
21.01.2010, 16:47
ptr - Указатель на блок памяти созданный с помощью "malloc"
ясен хрен что во времена C не было оператора new. Но оно работает. И для увеличения и для уменьшения.

Hiro Protagonist
21.01.2010, 17:26
На сколько я помню в msvc нет отдельного менеджера кучи для new и он лишь обертка над malloc. За остальные имплиментации рунтайма не скажу. Так что все там будет работать по крайней мере в msvc )
PS А ну да забыл, так лучше не делать ибо плохой стиль ))

cupper
21.01.2010, 18:06
На сколько я помню в msvc нет отдельного менеджера кучи для new и он лишь обертка над malloc. За остальные имплиментации рунтайма не скажу. Так что все там будет работать по крайней мере в msvc )
PS А ну да забыл, так лучше не делать ибо плохой стиль ))
это стиль С где все ручками, конечно все кричат надо юзать обертки, но не кто не отменял корешки. Мне просто лень в моей задаче юзать векторы и т.д.

rudvil
21.01.2010, 18:08
это стиль С где все ручками, конечно все кричат надо юзать обертки, но не кто не отменял корешки. Мне просто лень в моей задаче юзать векторы и т.д.
Лень юзать по простому? ^^

Hiro Protagonist
21.01.2010, 19:54
2cupper
может оказаться, что код не переносим между компиляторами, но если тебе на это класть, то пофиг. Если же хз, то лучше придерживаться стандарта ) того или иного )

Ra$cal
21.01.2010, 20:08
смысл юзать с++, если планируешь говнокодить? юзай делфи, там меньше заморочек при работе с памятью.

SHARA
23.01.2010, 01:53
Я что затупил не могу ошибку найти

#include<iostream>
using namespace std;
class sample
{
int a;
int b;
public:
void put_value(int i, int j);
void show_value();
};
void sample::put_value(int i, int j)
{
a=i;
b=j;
}
void sample::show_value()
{
cout<<"Закрытый член данных a: "<<a<<<<endl;
cout<<"Закрытый член данных b: "<<b<<<<endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
sample ob1, ob2;
ob1.put_value(10,18);
ob2.put_value(1,12);
cout<<"Значение первого обьекта до присваивания: "<<ob1.show_value()<<endl;
cout<<"Значение второго обьекта до присваивания: "<<ob2.show_value()<<endl;
ob2=ob1;
cout<<"Значение первого обьекта до присваивания: "<<ob1.show_value()<<endl;
cout<<"Значение второго обьекта до присваивания: "<<ob2.show_value()<<endl;
return 0;
}




ПАСИБА ОШИБКУ ПОНЯЛ))))))
пОЛ ДНЯ ТУПИЛ

rudvil
23.01.2010, 01:59
Я что затупил не могу ошибку найти
#include<iostream>
using namespace std;
class sample
{
int a;
int b;
public:
void put_value(int i, int j);
void show_value();
};
void sample::put_value(int i, int j)
{
a=i;
b=j;
}
void sample::show_value()
{
cout<<"Закрытый член данных a: "<<a<<endl;
cout<<"Закрытый член данных b: "<<b<<endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
sample ob1, ob2;
ob1.put_value(10,18);
ob2.put_value(1,12);
cout << "Значение первого обьекта до присваивания: ";
ob1.show_value();
cout << endl;
cout << "Значение второго обьекта до присваивания: ";
ob2.show_value();
cout << endl;
ob2=ob1;
cout<<"Значение первого обьекта до присваивания: ";
ob1.show_value();
cout << endl;
cout << "Значение второго обьекта до присваивания: ";
cout << endl;
ob2.show_value();
return 0;
}

SHARA
23.01.2010, 05:17
спасибо, ошибку нашел))))

almazz
23.01.2010, 23:36
как выключить отладку приложений в VS2008?Крошится hddlife.exe и постоянно выходит "Вы не желаете отладить приложение?"

POS_troi
24.01.2010, 00:08
http://technet.microsoft.com/ru-ru/library/aa995708%28EXCHG.80%29.aspx

almazz
24.01.2010, 01:03
http://technet.microsoft.com/ru-ru/library/aa995708%28EXCHG.80%29.aspx
правильнее http://msdn.microsoft.com/ru-ru/library/k8kf6y2a.aspx

Keltos
25.01.2010, 12:15
Написал я простенькую програмку на С++, отправил своему другу, он не может открыть, пишет типо не удалось запустить....

Chubakur
25.01.2010, 12:54
Keltos, на С++ Builder писал? Если да, то:
Project->Options->Packages, и поставь(или наоборот сними) галочку напротив, Build With Runtime Libraries. После этого перекомпилируй.

+casper+
25.01.2010, 18:01
вопрос: ошибка компилирования в Dev C++
код:
/************************************************** *****************************

Satanic Socks Server v0.66.170506
Powered by drmist\STNC

Compilation:
Win32: Visual C++
Unix: gcc -lpthread sss.c -o sss

v0.66.170506
+ IPv4
+ Domain names
+ Connect method
+ Login:Password authorization

(c) 2006 www.security-teams.net crew

************************************************** *****************************/

//#define UNIX 1
#define WIN32 1
/#define AUTH_ON 1
#define PORT 3003
#define BUFF_SIZE 1024

#ifdef AUTH_ON

const char AuthLogin[] = "login";
const char AuthPass[] = "pass";
#define SOCKS5_METHOD 0x02
#else

#define SOCKS5_METHOD 0x00
#endif

#ifdef UNIX

#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "netdb.h"

typedef int SOCKET;
typedef int bool;
typedef int __stdcall;

#define SOCKET_ERROR -1
#define INVALID_SOCKET -1

#define false 0
#define true 1

#define SD_BOTH SHUT_RDWR

#define _malloc malloc
#define closesocket close

void create_thread(void* func, void* param)
{
int ThrId;
pthread_create(&ThrId, 0, func, param);
}

#endif

#ifdef WIN32

#include "winsock2.h"

#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
#pragma comment(linker, "/ENTRY:main /ALIGN:0x200 /BASE:0x400000")
#pragma comment(linker, "/MERGE:.rdata=.text /SECTION:.text, EWR")

typedef UINT in_addr_t;

#define strcmp lstrcmp
#define free GlobalFree

void create_thread(void* func, void* param)
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, param, 0, NULL);
}

char* _malloc(int BuffSize)
{
return (char*)GlobalAlloc(GMEM_FIXED, BuffSize);
}

void bzero(void* lpBuff, int BuffSize)
{
_asm
{
xor eax, eax
mov ecx, BuffSize
mov edi, lpBuff
cld
rep stosb
}
}

#endif

#define SOCKS_VERSION 0x05
#define SOCKS_SUCCESS 0x00
#define SOCKS_FAILURE 0x01
#define SOCKS_CONNECTION_REFUSED 0x05
#define SOCKS_CMD_NOT_SUPPORTED 0x07

typedef struct
{

char* _ConnectStruct;
SOCKET From;
SOCKET To;
char Buff[BUFF_SIZE];
char* Error;

} SOCKSPIPE;

typedef SOCKSPIPE* LPSOCKSPIPE;

typedef struct _CONNECTSTRUCT
{

SOCKSPIPE FromStruct;
SOCKSPIPE ToStruct;
char Error;

} CONNECTSTRUCT;

typedef CONNECTSTRUCT* LPCONNECTSTRUCT;

LPCONNECTSTRUCT CreateConnectStruct(SOCKET From, SOCKET To)
{
LPCONNECTSTRUCT Result = (LPCONNECTSTRUCT)_malloc(sizeof(CONNECTSTRUCT));

Result->FromStruct._ConnectStruct = (char*)Result;
Result->FromStruct.From = From;
Result->FromStruct.To = To;
Result->FromStruct.Error = &(Result->Error);

Result->ToStruct._ConnectStruct = (char*)Result;
Result->ToStruct.From = To;
Result->ToStruct.To = From;
Result->ToStruct.Error = &(Result->Error);

Result->Error = 0x00;

return Result;
}

bool swrite(SOCKET s, char* Buff, int buff_size)
{
int bytes;

while(buff_size > 0)
{
bytes = send(s, Buff, buff_size, 0);

if((bytes == 0)||(bytes == SOCKET_ERROR))
return false;
buff_size -= bytes;
Buff += bytes;
}

return true;
}

bool sread(SOCKET s, char* Buff, int buff_size)
{
int bytes;

while(buff_size > 0)
{
bytes = recv(s, Buff, buff_size, 0);

if((bytes == 0)||(bytes == SOCKET_ERROR))
return false;

buff_size -= bytes;
Buff += bytes;
}

return true;
}

__stdcall SocksPipe(LPSOCKSPIPE PipeStruct)
{
int bytes;

do
{
bytes = recv(PipeStruct->From, PipeStruct->Buff, BUFF_SIZE, 0);

if((bytes == 0) || (bytes == SOCKET_ERROR))
break;

if(*(PipeStruct->Error) & 0x01)
{
*(PipeStruct->Error) |= 0x02;
return 0;
}

if(!swrite(PipeStruct->To, PipeStruct->Buff, bytes))
{
*(PipeStruct->Error) |= 0x02;
return 0;
}
}
while(!(*(PipeStruct->Error) & 0x01));

if(*(PipeStruct->Error) & 0x01)
*(PipeStruct->Error) |= 0x02;
else
{
*(PipeStruct->Error) |= 0x01;
shutdown(PipeStruct->From, SD_BOTH);
shutdown(PipeStruct->To, SD_BOTH);
closesocket(PipeStruct->From);
closesocket(PipeStruct->To);

while(!(*(PipeStruct->Error) & 0x02))
{
#ifdef UNIX
sleep(1);
#endif
#ifdef WIN32
Sleep(1000);
#endif
}

free(PipeStruct->_ConnectStruct);
}

return 0;
}

bool Socks5SendCode(SOCKET s, char Code, char* TempBuff, char* ip, char* port)
{
*(int*)TempBuff = 0x1000000 | (Code << 8) | SOCKS_VERSION;
*(int*)(TempBuff + 4) = *(int*)ip;
*(short*)(TempBuff + 8) = *(short*)port;

return swrite(s, TempBuff, 10);
}

SOCKET Socks5ServConnect(SOCKET s, char* TempBuff, char* ip, u_short port)
{
struct sockaddr_in saddr;
SOCKET Redir = socket(AF_INET, SOCK_STREAM, 0);

if(Redir == INVALID_SOCKET)
Socks5SendCode(s, SOCKS_FAILURE, TempBuff, ip, (char*)&port);
else
{
bzero(&saddr, sizeof(struct sockaddr_in));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = *(in_addr_t*)ip;
saddr.sin_port = port;

if(connect(Redir, (struct sockaddr*)&saddr, sizeof(struct sockaddr_in)) == -1)
{
Socks5SendCode(s, SOCKS_CONNECTION_REFUSED, TempBuff, ip, (char*)&port);
closesocket(Redir);
Redir = INVALID_SOCKET;
}
}
return Redir;
}

bool Socks5CmdIsSupported(SOCKET s, char cmd, char* TempBuff, char* ip, char* port)
{
if(cmd != 0x01) // 0x02 - bind; 0x03 - udp associate
{
Socks5SendCode(s, SOCKS_CMD_NOT_SUPPORTED, TempBuff, ip, port);
return false;
}

return true;
}

bool Socks5GetCmd(SOCKET s, char* TempBuff, char* cmd, char* ip, char* port)
{
struct hostent* hp;
char DnLen;
char AddrType;
char Tmp[5];

if(!sread(s, TempBuff, 4))
return false;

if((TempBuff[0] != SOCKS_VERSION)||(TempBuff[2] != 0x00))
return false;

*cmd = TempBuff[1];
AddrType = TempBuff[3];

switch(AddrType)
{
case 0x01: // ip v4
if(!sread(s, ip, 4))
return false;
break;

case 0x03: // domain name

if(!sread(s, &DnLen, 1))
return false;
if(DnLen == 0)
return false;
if(!sread(s, TempBuff, DnLen))
return false;
TempBuff[DnLen] = 0x00;

hp = gethostbyname(TempBuff);

if(((int)hp == -1)||((int)hp == 0))
{
if(!sread(s, port, 2))
return false;

*(int*)(&Tmp) = 0x03000405;
*(char*)(&Tmp + 4) = DnLen;

if(swrite(s, Tmp, 5))
if(swrite(s, TempBuff, DnLen))
swrite(s, port, 2);

return false;
}
else
*(int*)ip = *(int*)hp->h_addr;

break;

case 0x04: // ip v6, not supported
*(int*)(&Tmp) = 0x04000805;

if(sread(s, TempBuff, 16))
if(sread(s, port, 2))
if(swrite(s, Tmp, 4))
if(swrite(s, TempBuff, 16))
swrite(s, port, 2);

return false;

default:
return false;
}

return sread(s, port, 2);
}

#ifdef AUTH_ON

bool Socks5Auth(SOCKET s, char* TempBuff)
{
char Login[256];
char LoginLen;
char PassLen;
char Status = '\xFF';

if(!sread(s, TempBuff, 2))
return false;

LoginLen = TempBuff[1];

if((TempBuff[0] != 0x01)||(LoginLen == 0))
return false;

if(!sread(s, Login, LoginLen+1))
return false;

PassLen = Login[LoginLen];

if(!PassLen)
return false;

Login[LoginLen] = 0x00;

if(!sread(s, TempBuff, PassLen))
return false;

TempBuff[PassLen] = 0x00;

if((strcmp(AuthLogin, Login) == 0)&&(strcmp(AuthPass, TempBuff) == 0))
Status = 0x00;

*(short*)TempBuff = (Status << 8) | 0x01;

if(!swrite(s, TempBuff, 2))
return false;

return (Status == 0x00);
}

#endif

bool Socks5Accept(SOCKET s, char* TempBuff)
{
char MethodsCount;
char Cmd = '\xFF';

if(!sread(s, TempBuff, 2))
return false;

MethodsCount = TempBuff[1];

if((TempBuff[0] != SOCKS_VERSION)||(MethodsCount == 0))
return false;

if(!sread(s, TempBuff, MethodsCount))
return false;

do
{
MethodsCount--;

if(TempBuff[MethodsCount] == SOCKS5_METHOD)
{
Cmd = TempBuff[MethodsCount];
break;
}
}
while(MethodsCount > 0);

*(short*)TempBuff = (Cmd << 8) | SOCKS_VERSION;

if(!swrite(s, TempBuff, 2))
return false;

#ifdef AUTH_ON

return (Cmd == 0xFF) ? false : Socks5Auth(s, TempBuff);
#else

return (Cmd != 0xFF);
#endif

}

__stdcall AcceptThread(SOCKET s)
{
SOCKET Redir;
LPCONNECTSTRUCT ConnectStruct;
char TempBuff[256];
char cmd;
char ip[4];
u_short port;

if(Socks5Accept(s, TempBuff))
if(Socks5GetCmd(s, TempBuff, &cmd, ip, (char*)&port))
if(Socks5CmdIsSupported(s, cmd, TempBuff, ip, (char*)&port))
{
Redir = Socks5ServConnect(s, TempBuff, ip, port);

if(Redir != INVALID_SOCKET)
{
if(Socks5SendCode(s, SOCKS_SUCCESS, TempBuff, ip, (char*)&port))
{
ConnectStruct = CreateConnectStruct(s, Redir);
create_thread(&SocksPipe, &(ConnectStruct->ToStruct));
SocksPipe(&(ConnectStruct->FromStruct));
return 0;
}
closesocket(Redir);
}
}

closesocket(s);
return 0;
}


int main(int argc, char* argv[])
{
SOCKET s, accepted;
struct sockaddr_in saddr;
int saddr_size = sizeof(struct sockaddr_in);

#ifdef WIN32

WSADATA WSA;
if(WSAStartup(MAKEWORD(2, 2), &WSA) != 0)
return 0;

#endif

s = socket(AF_INET, SOCK_STREAM, 0);

if(s != INVALID_SOCKET)
{
bzero(&saddr, sizeof(struct sockaddr_in));

saddr.sin_family = AF_INET;
saddr.sin_port = htons(PORT);

if(bind(s, (struct sockaddr*)&saddr, sizeof(struct sockaddr_in)) != SOCKET_ERROR)
if(listen(s, 0) != SOCKET_ERROR)
for(;;)
{
accepted = accept(s, (struct sockaddr*)&saddr, &saddr_size);

if(accepted != INVALID_SOCKET)
create_thread(&AcceptThread, (void*)accepted);
}

closesocket(s);
}

#ifdef WIN32

WSACleanup();
ExitProcess(0);

#endif

return 0;
}

Chaak
25.01.2010, 18:34
да

Krist_ALL
25.01.2010, 20:40
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...

Как мне разобраться с указателями и ссылками?

cupper
25.01.2010, 21:06
ссылка на пременную - это синоним по которому к нему можно обратиться
указатель это переменная значениее которой адрес указывающий на адрес содержащий значение переменной. Я для себя это так понимаю. и мне этого хватает.

rudvil
25.01.2010, 23:15
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...

Как мне разобраться с указателями и ссылками?
Если с англ. нет проблем, тут (http://www.cplusplus.com/doc/tutorial/pointers/) очень понятно описано что-да как.

nMonkn
26.01.2010, 09:31
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...

Как мне разобраться с указателями и ссылками?

Чтобы лучше разобратся с указателями, напиши простенькую прогрумку аля
void mail(void)
{
char *text = "test";
MessageBox(NULL, text, "cap", MB_OK);
return;
}

Потом открой ее в отладчике(OllyDbg) и посмотри как используется указатель на текст.


ЗЫ
Я сам, пока не посмотрел в отладчике, не до конца понимал принцип указателей.

SHARA
28.01.2010, 11:13
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...

Как мне разобраться с указателями и ссылками?
А что именно не понятно?

Keltos
28.01.2010, 17:25
1>------ Построение начато: проект: keltos, Конфигурация: Debug Win32 ------
1>Компиляция...
1>keltos.cpp
1>c:\projects\keltos\keltos\keltos.cpp(1) : fatal error C1083: Не удается открыть файл предкомпилированный заголовок: Debug\keltos.pch: No such file or directory
1>Журнал построения был сохранен в "file://c:\Users\DHARMA\Documents\Visual Studio 2008\Projects\keltos\keltos\Debug\BuildLog.htm"
1>keltos - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Почитал в гугле, надо сделать так:

Alt +F7>>C\C++>>Предварительно скомпилированные заголовки >>выбрать: не использовать предварительно скомпилированные заголовки

После этого все норм компилируется, но в папке Debug нет exeшника. Есть файлы:
pdb
idb
obj
и BuildLog.

Помогите..

Ra$cal
28.01.2010, 17:42
Create Precompiled Header (/Yc)
эту опцию выбери, и создастся pch файл. Потом обратно use precompiled header

Keltos
28.01.2010, 17:51
Create Precompiled Header (/Yc)
эту опцию выбери, и создастся pch файл. Потом обратно use precompiled header
ДА создался, но exe не появился.

Ra$cal
28.01.2010, 18:01
F5 нажми. Запустится или нет? Очень сомневаюсь, что ехе не создается.

Keltos
28.01.2010, 18:03
F5 нажми. Запустится или нет? Очень сомневаюсь, что ехе не создается.
Спасибо, помогло.

Failure
28.01.2010, 22:36
сам решил, сотрите плз

wolmer
29.01.2010, 03:06
Как полностью и нормально принять пакет с помощью winsock? (TCP (HTTP))(C++)
Хотелось бы принять не затрагивая Content-Length, так как была однажды ситуация когда сервер просто не возвращал Content-Length а в конце принятого пакета писалась всякая гадость (к примеру 400 bad request (после 200 ok))
Прием делаю так:
Цикл while + проверка на то что вернула нам функция recv, если значение recv -> NULL или SOCKET_ERROR -> break