Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
19]
20
21
22
Короче так, делаешь в unit1.h обьявление твоего класса в unit1.cpp реализация,
в unit2.h я так понимаю обьявление класса формы там и добавляешь переменную своего класса и создаешь экземпляр класса(в куче/стеке как хочешь)
п.с. лучше избегать обьявления глобальных переменных.
п.п.с. всю реализацию желательно выноси в .срр файлы что бы потом путаницы небыло.
так же у тебя будут проблемы, когда ты проинклюдишь этот класс более чем в одном файле
та я думаю борланд протект на хэдэры ifndef/define ставит ))
PandoraBox
20.12.2009, 01:59
Немного не ясно что тебе необходимо сделать, поподробней ...
проектирование и разработка системы для тестирование работоспособности сети (в графическом виде)
http://s14.radikal.ru/i187/0912/fc/6b01eeb85f65.png
зачем объект объявляешь прямо в хидере с описанием класса? его обычно объявляют в том классе, который будет его использовать. так же у тебя будут проблемы, когда ты проинклюдишь этот класс более чем в одном файле. нужно будет ставить модификатор 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);
};
ладно ща книжку нашел Архангельский еще читану, вроде по классам
да, лучше почитай книжку. это основы, в первых главах объясняются.
PandoraBox
20.12.2009, 02:18
SaiRus, вот еще глянь такой способ подстановки функции http://www.rsdn.ru/article/files/Classes/tparser.xml
Спасибо парни, на самом деле более - менее понял структуру :)
но щас пытаюсь понять следующее, почему мой созданый класс не понимает
такой строчки
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 !
на самом деле не понимаю только одно
почему такая конструкция не катила
в хедаре1 описан класс в файле реализации (срр1) описаны методы через расширение области "::", в этих методах выводиться в форм1->мемо1 текс, потом объявление класса объявление формы, вызов метода
а такая катит
в хедаре1 описан класс в файле реализации (срр1) описаны методы через расширение области "::", в этих методах выводиться в форм2->мемо1 текс
мож сам че то накосячил, ну ладно...
если есть ошибки - пиши код. ломать голову над переводом русского в с++ задача та еще, слишком много нюансов.
похер кароче, разбирать ебанистические коды действительно не благодарное занятие :)
строку с ошибкой тоже стоит выводить, а не описывать ее. это упростит анализ проблем и ускорит ответы.
PS: стиль форматирования просто ебанистический. нечитабельный ниразу. советую срочно сменить до более менее стандартных способов.
Помогите на С++ решить...
Вивести на екран символи та їх 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;
}
char array[]={'A','B','H','C','D'};
free(array);
ппц ...
он даже ASCII не пожет толком написать.
это не я писал, с моего ника..я вообще С++ не учу...
#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, Тоесть надо пользоваться им?
Ок попробую, спс за ответ. :)
Помогите пожалуйста исправить ошибки
#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) но примеров мало и ничего интересного нарисовать не выходит ....
вот вот 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++ реализовать под соединение и репликацию в своем кластере собственного приготовление
кто силен в вике разметке?
помогите пожалуйста с выводом.
ширина поля 5, количество знаков после запятой 2.
Правильно я записал? И как правильно?
WriteLn (' ':5,'K=',K:5,' ':2,'K=',K); //Все разобрался К:5:2
a1ertso прежде чем программировать научись отличать языки.
нахера ты вопрос по паскалю в тему про С++ зафигачил??
writeln('K=', K:5:2);
#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".... то всё работает, почему?
читай на тему область видимости и время жизни локальных переменных
Есть процесс, нужно узнать какие файлы он использует и к каким обращается?
Как в Filemon'е.
Как это реализуется?
zeppe1in
21.12.2009, 18:39
например можеш хукать апи CreateFile
читай на тему область видимости и время жизни локальных переменных
Проблема не в этом, переменная точно видна, точно существует и точно содержит верный адрес но не работает((
Проблема не в этом, переменная точно видна, точно существует и точно содержит верный адрес но не работает((
В этом. При выходе из функции переменная fon уже не существует и в памяти которую она занимала может быть что угодно.
В этом. При выходе из функции переменная fon уже не существует и в памяти которую она занимала может быть что угодно.
хм, дык я же её возвращаю return (LPCWSTR)strcat(fon,img); даже если написать это в не функции то то же не работает, переменная не пуста и значение верно но не работает.
//хм, уже не верно.
(LPCWSTR)"theme" превращает текст в каракуль, а если написать L"theme" то всё нормально, разве (LPCWSTR) и L преобразуют в разные типы?
// всё проблему решил
всем здрасти.
возникла нужда в создании самого простенького окна написанного на плюсах ... может кто поделиться опытом?
Есть процесс, нужно узнать какие файлы он использует и к каким обращается?
Как в Filemon'е.
Как это реализуется?
NtQuerySystemInformation с классом SystemHandleInformation. на пайпах виснет.
"Как в Filemon'е." - Драйвер фильтр фс писать надо.
Берите исходники файлмона и изучайте.
например можеш хукать апи CreateFile
К чему это было сказано - непонятно.
возникла нужда в создании самого простенького окна написанного на плюсах ... может кто поделиться опытом?
не пробовал запустить студию и создать оконный win32 проект мастером? не?
Здравствуйте, помогите разобраться, почему не компилируется следующая программа (вернее компилируется, но во время исполнения вылетает ошибка)
//определяем число вхождений подстроки в введенную пользователем строку
# 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. В С++ новичёк, извините за глупый вопрос)
c_str есть для этого по-идее
Здравствуйте, помогите разобраться, почему не компилируется следующая программа (вернее компилируется, но во время исполнения вылетает ошибка)
//определяем число вхождений подстроки в введенную пользователем строку
# 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().
Эх, достал меня с++. хочу получить содержание файла в 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[]. Как их друг в друга преобразовать?
Эх, достал меня с++. хочу получить содержание файла в 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;
}
rudvil, то что надо, только почему то возвращаются каракули((
//
строка из файла используется для открытия другого файла в качестве путя. Такая же каракуль и при (LPCWSTR)"default" а если написать L"default" всё нормально, почему?
rudvil, то что надо, только почему то возвращаются каракули((
//
строка из файла используется для открытия другого файла в качестве путя. Такая же каракуль и при (LPCWSTR)"default" а если написать L"default" всё нормально, почему?
Eo0, ты так и будешь продолжать брутфорсить компилятор своими догадками? Возьми учебник по С++, любой, почитай, и эти вопросы отпадут сами собой.
(LPCWSTR)"default" <- тут ты строку типа const char приводишь к типу LPCWSTR, который по сути является указателем на wchar_t,
L"default" - а здесь объявляешь как const wchar_t, потому и работает.
http://img686.imageshack.us/img686/6167/78413304.th.jpg (http://img686.imageshack.us/i/78413304.jpg/)
Проблема в реализации данной схемы в Qt4
Вообщем есть класс формы в котором создано несколько экземпляров класса какого то эллемента, а так же класс формы имеет один экземпляр класса который производит вычисления. Так вот вопрос в классе вычислений имеется массив который необходимо изменять в классах эллементов класса формы. Вроде как все просто но че то не катит... может причина что в Qt4 какие то особенности есть...
Я пробовал передавать просто указатель на массив что не прокатывало. Пробовал объявлять указатель в классе формы и через него это осуществлять что тоже не канало... вообщем вот. :(
Ребята у меня такой вопрос - Брут на дэдике - регулярно выскакивает табличка "Удалённый рабочий стол отключен" как её вырубить чтоб она не появлялась , а то на автомат не как не поставить , приходится постоянно кликать ОК , что бы брутить дальше иначе весь процесс тормазиться !
Вроде как все просто но че то не катит... может причина что в Qt4 какие то особенности есть...
Я пробовал передавать просто указатель на массив что не прокатывало. Пробовал объявлять указатель в классе формы и через него это осуществлять что тоже не канало... вообщем вот.
что значит не прокатывало? яснее опиши проблему, а лучше выложи код.
Ребята у меня такой вопрос - Брут на дэдике - регулярно выскакивает табличка "Удалённый рабочий стол отключен" как её вырубить чтоб она не появлялась , а то на автомат не как не поставить , приходится постоянно кликать ОК , что бы брутить дальше иначе весь процесс тормазиться !есть программы эмулирующие действия мыши. например AC Tool или UOPilot. вобщем парси гугл на тему эмуляторов мыши и автокликеров.
Пытаюсь скомпилировать сплойт.
Но выдает какие то не понятные ошибки
СКРИН (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
Код не смотрел ибо лень, кажется там просто на дурака
В переменной int лежит адрес, как присвоить этот адрес указателю типа char* ? Кастить что-то не выходит(
int addr = 0x0012FE74;
char* ptr = ???
никак
нельзя задавать адреса
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
что значит не прокатывало? яснее опиши проблему, а лучше выложи код.
Делаю так:
класс какого то объекта на форме:
#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
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];
}
}
Вообще лучше делать данные поля закрытыми и обращатся к ним через геттеры/сеттеры.
ты хоть читаешь что компилятор пишет?
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
sc->mas[i][j] = xoii->mas[i][j];
}
}
Вообще лучше делать данные поля закрытыми и обращатся к ним через геттеры/сеттеры.
При использовния данной конструкции я тупо копирую массив 1 в другой. А мне как бы надо что бы была одна ссылка на область памяти(массив) и я ее мог изменять во всех классах и так же при изменение в одном классе изменения отражались во всех
объясните что я не так сделал, изучаю сокеты, по книге "Эффективное программирование 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;
}
скажите пожалуйста, как грамотно содержимое файла занести в массив строк типа string? размер файл заранее неизвестен.
на данный момент я могу прочитать все в одну строку.
как бы сделать универсальную функцию, которая возвращает массив со строками, чтобы этот массив можно было объявлять без указания размера?
типа
string []rows = loadFile("rows.txt");
открываю файл
ifstream fin("file.txt");
копирую его в вектор, типа string
copy(istream_iterator<string>(fin), istream_iterator<string>(), back_inserter(vect));
получаю вектор в котором файл разбит на элементы по ПРОБЕЛАМ
как сделать так, чтобы он разбивал по переводам строк?
посоветуйте книгИ по С,
С != С++
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;
}
есть емаксеры? :\
тут такая проблема,
;; 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 и сменил бинд на другие кнопки,
Вычислить. Количество натуральных чисел сумма которых не превышает заранее заданного числа N
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); - результат тот же.
-CEREBRUM-, my\ program.exe так будет? Или как то там еще в досе делалось, что 6 букв и ~, ну только непомню что там с пробелами, вроде их вобще не ставили.
PandoraBox, traceroute естественно есть и в *nix. Ну я про то что можно просто скачать исходники :) и посмотреть как все работает.
-CEREBRUM-
30.12.2009, 10:33
nitx, вы имеете в виду, my\ program.exe, что пробез здесь - это спецсимвол и его экранировать \ ??
Для делфи есть такой хороший сборник: http://delphibasics.ru/ , есть ли что нить подобное для c++?
Для делфи есть такой хороший сборник: 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(); можно объявить предварительно, это ведь процедура библиотеки...
создал проект на 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 не дает больше никакой информации, курл я качал довольно свежий
что ещё может быть не так?
Пишу на Си программу которая заполняет одномерный массив случайными числами, а потом этот массив сортирует в порядке от меньшего к большему. Вроде все нормально, но 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
Ох, я вас поблагодорил, но прога только заполняет массив псевдослучайными числами, а сортировать его не хочет...
Доброго времени суток!
Хочу начать изучать C++ Скинте пожалуйста ссылки на хороший материал: Уроки, Видео уроки, книги статьи.
Заранее благодарен!
_https://forum.antichat.ru/thread89681.html
Вопрос по синтаксису в с++ Builder:
В делфи тип переменной ди и сама переменные указываются до действия то есть перед Begin:
...
...
procedure TForm1.Button1Click(Sender: TObject);
Var
i:integer;
s:string;
//И т.д.
Begin
//Бля бла
end;
...
...
А как объявить переменные на cpp?
мб стоит сначала книжки почитать?
мб стоит сначала книжки почитать?
Не нашёл ни одной книги в в электронном виде, только сканы, которые невозможно читать...
Не нашёл ни одной книги в в электронном виде, только сканы, которые невозможно читать...
врешь ты все. книг полно. переменные можно объявлять почти где угодно.
например одну переменную в разных циклах.
Подскажите в чем соль? :)
#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
arr.insert(c, c);
О_о это где ты такое вычитал/увидел ?
скорее всего предпологается:
arr[c] = c;
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;
}
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]));
Вообщем мне нужно в строку добавить символы\слова в цикле, как это сделать? Нужен аналог как в 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
Доброго времени суток.
У меня вот такая ситуация.
Мне нужно произвести пост запрос.
Но сокет возвращает ответ что то с сессией.
Как через сокет в С++ начать сессию на нужном сайте чтобы запрос прошёл от моего пользователя???
Заранее благодарен.
сокет возвращает ответ что то с сессией.
телепаты на новогодних каникулах! :) что конкретно возвращается? приведи код!
на нужном сайте чтобы запрос прошёл от моего пользователя???
в смысле от твоего аккаунта на этом сайте?
опиши проблему конкретнее!!
Как в C++Builder 6 объявить функцию?
В Delphi это делается так:
function Name(i: Integer): string;
begin
Result :=IntToStr(i);
end;
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 исправь на глобальную!
2Retimiled -->
Чувак, вопрос был КАК ОБЪЯВИТЬ ФУНКЦИЮ.
Retimiled
05.01.2010, 03:00
2 Ins3t
Чувак вопрос был как это правильно сделать!
Например так:
#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;
}
#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
очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.
Подскажите плиз....
Как будет выглядит код на Си, который способен просмотреть содержимое папки?
Подскажите учебник на подобии "Библия delphi (Михаил Фленов)" но для C++ (кто читал/просматривал учебник "Библия delphi" тот подскажет я так думаю)
KI11obyte
05.01.2010, 12:10
Лучше Страуструпа для первой книги по С++ нет
ее негласно как раз и называют библия С++
Позволю себе не согласиться.
KI11obyte, неужели первая, книга которую ты прочитал, была Библия? Думаю, нет. Здесь то же самое. Лучше начать с Либерти. А потом уже закреплять Страуструпом. Фленова не читал, так что не знаю, на что похожа его книга, но в качестве первой Страуструп, по-моему, не очень подходит.
#include <iostream>
#include <stdlib.h>
using namespace std;
char function(int i, char * result);
...
Такое мясо из языков ( Разберитесь уж на чем пишите :)
но вы видимо еще не на этом уровне
А Вы на этом уровне?)))
(и юзеру наплевать на программиста вместе с его классами если один из параметров страдает)
вы хоть раз писали софт, по размеру от 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" и поразитесь насколько редко используется С++ в его высокоуровневой компоненте, не сбивайте школьников обьясняя им что С++ , только высокоуровневый , если сами не понимаете всей полноты языка лучше помолчите!
1 - itoa требует работы в стиле си, т.к. класс string не дает доступа к своему буферу на запись. поэтому itoa в c++ весьма неразумно. для этого дела специально созданы потоки.
2 - если это не узкое место программы - значит проблем нет. прекратите думать за компилятор, предсказывать узкие места по производительности. занимайтесь лучше программированием предметной области. если же это есть место проблемы - тогда да. берем и оптимизируем, убираем потенциальные выделения памяти, лишние операции. все заменяем на простейшие операции. но только после подтверждения факта проблемы. а вы боритесь с проблемой, которую сами придумываете.
удачи. далее спорить влом.
кароч, если пишешь на си - пиши. тока не лезь в с++, а то выглядишь очень глупо.
Приветствую всех, нуждаюсь в помаши.
Значит учусь по учембнику Джона либерти. Компилятор новый от майкрософт. Среда програмирования С++
В чем суть.
есть исходный тексь программы.
#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 ==========
Просьба подсказать, что за заголов отсутствует, и куда надо его вписывать.
За все ответы огромное спосибо. ;)
Приветствую всех, нуждаюсь в помаши.
Значит учусь по учембнику Джона либерти. Компилятор новый от майкрософт. Среда програмирования С++
В чем суть.
есть исходный тексь программы.
Вылезает ошибка:
Также ещё один исходник:
Вроде все верно, но при компиляции выдаеться таже ошибка. =(
Просьба подсказать, что за заголов отсутствует, и куда надо его вписывать.
За все ответы огромное спосибо. ;)
#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
cout << "tra-lya-lya!" << endl;
cout << "tra-lya-lya!" << endl;
return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
cout << "tra-lya-lya!" << endl;
cout << "tra-lya-lya!" << endl;
return 0;
}
спс большое все получилось... книжка устарела видимо. :) :) :)
ничего не устарело. читай просто внимательнее, когда ставится ; а когда нет.
ничего не устарело. читай просто внимательнее, когда ставится ; а когда нет.
Я впринципе все делал правильно, у меня лиш вылезала ошибка
отсутствует заголовок функции
И модератор подсказал using namespace std; =) (чего в книге нету нигде)
Поэтому ; и : тут не причем =)
до правки в твоем коде было так
#include <iostream>
int main()
;{
cout << "Hello World!\n" ;
return 0;
;}
В данном случае неуместные ; очень даже причем. И компилятор ругается на них. - error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
до правки в твоем коде было так
#include <iostream>
int main()
;{
cout << "Hello World!\n" ;
return 0;
;}
В данном случае неуместные ; очень даже причем. И компилятор ругается на них. -
Это я знаю. Понатыкал ; перед { u }, т.к компилятор указывал на ошибки, я в поисках правильного решения проверял все варианты, сюда отписался тоже одним из своих вариантов... =) . Потом исправил мои ошибки, отредактировал =)
Порой в книгах, которые работают с djvureader очень тяжко разгледеть стоит внизу запятая или точка. С этим я думаю ты согласишся =) Как не приближай. :)
draliokero
07.01.2010, 11:04
Как в файле найти все строки, где есть указанное слово, и удалить их?
draliokero, в этой теме помогают новичкам, а не делают все за них. выкладывай то, что сделал сам, а мы укажем на ошибки
herfleisch
07.01.2010, 16:35
Как в файле найти все строки, где есть указанное слово, и удалить их?
Примерно так:
Открываем файл Src на чтение;
Открываем файл Dst на запись;
пока (не достигнут конец файла)
{
читаем строку из Src;
если ( строка не содержит Слово)
{
записываем строку Dst;
}
}
Закрываем файлы;
Теперь переводи на нужный тебе язык и работай ручками и головой.
koder.
когда я пытаюсь помочь - я отвечаю на суть поста, т.е. на ошибки в коде и сообщения компилятора, а не просто копирую подходящий под условия код. Поэтому старайся если запостил неправильный код - добавить новый код к концу сообщения, но не править исходный. Иначе между твоими сообщениями и ответами форумчан теряется логическая связь.
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. Это и не хорошо, и не плохо. Это их право.
koder., прочитайте начало книги. Я отчетливо помню, что там отдельно оговаривается, почему в текстах книги используется данный вариант и когда применяется другой. Книга НЕ устарела, Ra$cal НЕ ошибается, вы НЕ правы да и автора зовут вовсе НЕ Джон.
Допустим, есть ссылка http://****.ru/online_now.php , там же есть меняющийся текст Server Down или Server Up, я создал webbrowser через который текст просматривается, как сделать так чтобы при нажатии на button1, webbrowser обновлялся?
Приношу свои извинения Ra$cal
Книга от ДЖЕС* Ошибсо :(
не помешало бы еще куда нить приклеить ссылочку на сей замечательнейший фак. очень много полезной инфы, некоторая даже переведена, если вдруг английский незнаком.
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 заменить на имя твоего объекта
}
Допустим, есть ссылка http://****.ru/online_now.php , там же есть меняющийся текст Server Down или Server Up, я создал webbrowser через который текст просматривается, как сделать так чтобы при нажатии на button1, webbrowser обновлялся?
Delphi? Попробуй WebBrowser1->Refresh;
koder., прочитайте начало книги. Я отчетливо помню, что там отдельно оговаривается, почему в текстах книги используется данный вариант и когда применяется другой. Книга НЕ устарела, Ra$cal НЕ ошибается, вы НЕ правы да и автора зовут вовсе НЕ Джон.
ну чтобы в вижуал студии не писать постоянно пространство имен std:
сделали чтоб сразу обозначить using namespace std;
что выведет программа ?
#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;
...
Я прав?
Такая вот проблема. Совсем недавно, буквально вчера, начал учить С++. Решил написать небольшую прогу. Собственно вот код.
#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))
Это тебе те паскаль
herfleisch
09.01.2010, 23:26
Оу... Спасибо :)
Если уж начал учить C/C++, отвыкай от меток и операторов goto. Они - признак плохого тона. Онотоле таке не одобряе )))
:) А чем можно заменить goto?
[QUOTE=herfleisch]Выведет единицу. Т.к. int разделить на int получится int. Не компилировал. Помню, говорили об этом на первом курсе университета.
[/qoute]
Вот какого хера выведет еденицу, ведь блин всегда при делении с остатком если это int округлялось в большую сторону, а щас на те и 1.
PS. 1.5 мне ненадо получать %)
Если не ошибаюсь, то округляется тогда, когда после точки идет число больше 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() {}
А почему while? Вроде бы это повтор кода пока условие исполняется... Не будет ли этот цикл бесконечным?
herfleisch
09.01.2010, 23:41
А почему while? Вроде бы это повтор кода пока условие исполняется... Не будет ли этот цикл бесконечным?
Ну что-то вроде "Выполнять какой-нибудь кусок кода, пока числа не будут введены верно".Хотя, признаться честно, я твой код смотрел по диагонали )))
Такая вот проблема. Совсем недавно, буквально вчера, начал учить С++. Решил написать небольшую прогу. Собственно вот код.
#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)
попробуй так)
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 вынести за пределы цикла. И в условии цикла заменить && на ||. Не путайте людей, изучающих С++ второй день ))
очередное горе, желающее, чтобы программа выполнялась за 0.00001с а не за 0.00005с. Мне лень вразумлять о преждевременной оптимизации, о том, что пишется код не для компьютера, а для программиста, и о прочих деталях пром кодинга, а не коленочного под пиво. Читайте книжки, или кодьте на асме. С++ сделали не для переписывания на нем си программ. Когда поймете, почему делают новые языки, такие как C++, Java, C#, тогда велкам.
"(C) Ra$cal" в конце забыл
Объявления переменных 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
Часто ли юзаются/нужны соединения?
Оч похожи соединения на структуры..
жжоте товарищи. первое - цитата моя. несколькими страницами раньше написана, и для другого контекста. второе - тут классы просто некуда приписать, так что все 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 - массив передается по умолчанию как указатель. можно передать массив по ссылке.
не соединения а объединения. юзаются весьма редко.
Krist_ALL
10.01.2010, 02:05
4. Какую точку ставить?О.О
а чем отличается
s(char a[]) {
... }
и
s(char* a[]) {
...}
?
Второй код писать когда из функции я буду изменять массив?
Тогда надо передать массив так s(&a) да?
Или..
Вообще написано что если в функцию передан массив ,то когда в функции делается ++ ,то с++ просто сдвигает на нужную ячейку и все. => в функцию передается адрес начала массива.
Когда массив из цифр,то чтоб передать массив в функцию,надо еще и передать ск элементов в нем,а когда массив чар из букв,то не нада размер т.К. Функция определит конец по нул байту..
Блин ппц с этими указателями.. После пхп с++ оч сложно учить.
не на том внимание заостряешь. массивы по ссылке передавать смысл есть только если тебе нужно в переменную вернуть массив. вообще используют 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
Ты еще больше меня запутал( напиши в аську мне плз.
не, по асе не консультирую. ибо вместо того, чтобы попробовать учиться, писать код, компилить, наблюдать за работой, понимать, предпочитают сразу спрашивать. в этом плане форум самое то. я те пример кода привел. бери его и дебаж до просветления. будут доп вопросы по поводу конкретного кода - пиши на форум.
herfleisch
10.01.2010, 13:48
Ещё раз советую Б. Страуструпа )))
пытаюсь сделать алгоритм бинарного поиска, но такой чтобы при входе:
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. именно по принцыпу бинарного поиска.
Исходник в студию )
Да мне не лень компилить,пока прост нету возможности компилить.
Тогда ты долго будешь учить с++. Обычный алгоритм таков - читаешь главу, делаешь программу согласно главе, дебажишь до понимания. Потом начинаешь менять этот исходник чтобы понять вариации изменения кода и поведения. И так тестишь пока есть вопросы. Потом берешь и читаешь следующую главу.
Я сам не так давно таким образом с Qt возился. Книжка без практики, так же как и практика без книжки - пустая трата времени.
Исходник в студию )
какие исходники, я даже алгоритм не могу продумать. Я сосбно и просил помочь именно с составлением алгоритма
Не очень понятно причем тут бинарный поиск. Массив из случайных чисел или упорядоченный?
ну бинарный поиск работает только при упорядоченном массиве, после прогулки на улице, написал вот это
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;
}
проверил несколько раз, на листочке посчитал ручками, вроде работает. Может можно лучше сделать ?
И еще, как время в милисекундах получать, чтобы можно было засекать время работы функций
делаю так
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;
И еще, как время в милисекундах получать, чтобы можно было засекать время работы функций
Я этим пользуюсь. (http://www.dreamincode.net/forums/index.php?showtopic=24685&view=findpost&p=242559)
А как сделать так, чтобы при решении какого-нибудь уравнения(типа x-5+y+2=52-36) все числа с переменными(x и y например) оставались слева, а все остальные перемещались за знак равно вправо и при этом меняли знак с + на - и наоборот? К примеру чтобы из x-5+y+2=52-36 получилось x+y=52-36+5
Как принять ответ с помощью winsock (TCP), хочу чтобы у меня вместо квадратиков были русские буквы в принятом ответе!
(речь идет о C++)
herfleisch
11.01.2010, 22:05
Как принять ответ с помощью winsock (TCP), хочу чтобы у меня вместо квадратиков были русские буквы в принятом ответе!
Либо с сервера отправлять русские буквы вместо квадратиков, либо дебажить и смотреть куда смотря указатели, если речь идёт о С++.
Как узнать за сколько выполнилась та или иная функция в C++?
Глазки наверх подними ага
Вопщем. Как сделать так, чтобы числа перемещались влево, а x и у и их коэффициенты оставались слева, но числа при перемещении меняли знак?
для начала написать парсер
herfleisch
13.01.2010, 03:26
Для начала нужно забыть о школьных методах решения уравнений.
Моделирование обхода препятствия роботом.
Пиши свои наработки, мы доскажем
#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, ®s, ®s);
}
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);
}
Вот только я незнаю правильно или нет
добрый день, подскажите пожалуйста библиотеки для работы с 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.
для какого языка? мы не екстрасенсы))
зачем вообще библиотека. поиск и замена подстроки в строке уже требует доп библиотек? причем в любом языке...
Retimiled
14.01.2010, 13:34
2 Ann$
... ставь точнее задачу ... если обьезд препятствия то с какой целью ... если из одной точки достичь другой то существуют алгоритмы нахождения наикратчайшего пути и без разницы робот это или колобок!
herfleisch
14.01.2010, 15:24
А можно попросить тех, кто желает получить помощь в составлении алгоритма?
Уважаемые дамы и господа!
Если вы желаете получить ответы на свои вопросы, то задайте вопрос и предоставьте необходимую информацию так, чтобы у знающих людей была возможность ответить вам.
Не в коем случае не допускайте по 50 синтаксических, грамматических, пунктуационных и прочих ошибок. Такие обращения очень сложно читаются!!! Очень сложно!!! И, скорее всего, ваш вопрос останется без внимания определённого процента посетителей.
Если выкладываете исходник - выкладывайте ту часть, которая имеет отношение к вопросу. Не ленитесь отсеивать ненужную информацию! Каждый человек ценит своё время и ни у кого нет желания разбирать громоздкий код в несколько сот строк!
Одним словом - задавайте человеческие вопросы, если вы желаете получить человеческие ответы.
Спасибо за внимание. Надеюсь, моя просьба не останется незамеченной.
язык с++, поиск и замена не требует никаких библиотек, ну как мне искать подстроку, если файл (html страница) находится в интернети?
herfleisch
14.01.2010, 15:59
язык с++, поиск и замена не требует никаких библиотек, ну как мне искать подстроку, если файл (html страница) находится в интернети?
А удалять подстроку Вы тоже хотите прямо "в интернети"???
зачем мне удалять подстроку?
Дан файл (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
написать условие для удаления строки из текста, я надеюсь, ты сумеешь.
Как системно отслеживать что в папке появился новый файл?
Скажем у вас есть папка(папки), и вот этой папкой пользуются многа народа (и по сети и так), скажем вам нужно чтобы в папку можно было скопировать только файлы типа doc и txt, все остальные типы файлов скопировать туда было нельзя, что делать?
Под рукой у вас тока Dev C++, и ось винда.
И да, характеристики компа сильно ограничены, предположим пень 3.
libcurl для закачки файла http://curl.haxx.se/libcurl/
здесь библотека, чтоб пропарсить html http://www.codeproject.com/KB/library/GomzyHTMLReader.aspx
написать условие для удаления строки из текста, я надеюсь, ты сумеешь.
Слушай можешь со мной связаться или оставь свою асю есть парочка вопросов. моя ася 267-683-881
Помоги плиз с установкой библиотеки..
Как получить список всех дисков компьютера и узнать какой из них HDD а какой CD-ROM (DVD)?
POS_troi
18.01.2010, 14:45
Все поклоняются гуглу но пользоваться им не хотят
http://www.cyberforum.ru/visual-cpp/thread24216.html
2H1N1
Периодически Парси файлы в папке по расширению и все что левое удаляй (чтобы не заморачиваться с организацией циклов, можно воспользоваться "Расписание зада"). Это все можно сделать с помощью батника.
2aydar
Куда? какая среда? на MVC я так и не заставил CURL толком работать
Вот сам разобрался уже ))
#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
C++ Builder.
Собственно, обстоятельства заставили сесть за эту штуку.И тут же возник вопрос,как осуществляется работа с сетью? Загуглил на тему,нашел множество упоминаний про компонент idHTTP.А теперь собственно вопросы.Так как на дельфи я писал последний раз года два назад,и это был калькулятор,то никаких компонентов использовать не приходилось.И соответствнно,где их брать - я понятия не имею.Как подключить этот самый idHTTP к C++ Builder? Встроеный ли он? Откуда его скачать,и как подключить к коду? Я так понял,работа на Builder, сводиться к объектам и классам,тоесть и вызов будет примерно такой:
iddHTTP->UserAgent = 'Bla bla';
Простая попытка вызова вот так вот,этого самого компонента,привела к ошибки компилятора.так что мне нужен совет.В сети таких ответов нет,ну или я их не на гуглил.Спассбо большое.
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
И никаких ошибок.Работаю с буилдером как вы могли понять в первый раз.
Нашел тематический форум,там я нашел ответ,правда немного иной,но переделал под себя,и все заработало.Удивительно.
Так вот новый вопрос.Наипростейший код,вешаем на кнопку по клику событие:
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);
Спасибо.
Что произойдет если сделать так
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. Граница массива осталась на прежнем месте
realloc не предназначен для перевыделения памяти, выделенной new.
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
Программисты! Ответьте на вопросы выше :)
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)
неповеришь, но именно от тудова и взял ее. У меня туговато с англ, если не для изменения размера массива то, пилять, для чего ж она ?
void * realloc ( void * ptr, size_t size );
ptr - Pointer to a memory block previously allocated with malloc.
ptr - Указатель на блок памяти созданный с помощью "malloc"
zeppe1in
зачем? постановку задачи то пиши. а то реверсить чужое мышление - задача весьма нетривиальная. не то что программы писать.
zeppe1in
21.01.2010, 03:35
zeppe1in
зачем? постановку задачи то пиши. а то реверсить чужое мышление - задача весьма нетривиальная. не то что программы писать.
ну вообще дизасмлю ИЛ код. вот собственно подумал сделать класс где будет хранится опкод, тип опкода, ну и всё такое, что бы дальше мне удобно было работать со всем этим.
Или наверно лучше сделать,просто массив, а в нём адрес опкода, его размер, и тип.
Hiro Protagonist
21.01.2010, 07:37
2zeppe1in
если все делаешь на классах то и опкод храни как класс
если нет -> то массив структур. Придерживайся единообразия )
Блин,ребят) Обстоятельства требуют))
Ответьте на вопросы выше,а то я кончился уже =(
zeppe1in
21.01.2010, 13:58
2zeppe1in
если все делаешь на классах то и опкод храни как класс
если нет -> то массив структур. Придерживайся единообразия )
вся проблема в том, что только изучаю с++, и поэтому делаю как получится).
я думаю что с массивом структур(адрес,размер) будет лучше чем выделять память для каждого опкода.
пс:вот теперь думаю, может массив в класс засунуть.)
ptr - Указатель на блок памяти созданный с помощью "malloc"
ясен хрен что во времена C не было оператора new. Но оно работает. И для увеличения и для уменьшения.
Hiro Protagonist
21.01.2010, 17:26
На сколько я помню в msvc нет отдельного менеджера кучи для new и он лишь обертка над malloc. За остальные имплиментации рунтайма не скажу. Так что все там будет работать по крайней мере в msvc )
PS А ну да забыл, так лучше не делать ибо плохой стиль ))
На сколько я помню в msvc нет отдельного менеджера кучи для new и он лишь обертка над malloc. За остальные имплиментации рунтайма не скажу. Так что все там будет работать по крайней мере в msvc )
PS А ну да забыл, так лучше не делать ибо плохой стиль ))
это стиль С где все ручками, конечно все кричат надо юзать обертки, но не кто не отменял корешки. Мне просто лень в моей задаче юзать векторы и т.д.
это стиль С где все ручками, конечно все кричат надо юзать обертки, но не кто не отменял корешки. Мне просто лень в моей задаче юзать векторы и т.д.
Лень юзать по простому? ^^
Hiro Protagonist
21.01.2010, 19:54
2cupper
может оказаться, что код не переносим между компиляторами, но если тебе на это класть, то пофиг. Если же хз, то лучше придерживаться стандарта ) того или иного )
смысл юзать с++, если планируешь говнокодить? юзай делфи, там меньше заморочек при работе с памятью.
Я что затупил не могу ошибку найти
#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;
}
ПАСИБА ОШИБКУ ПОНЯЛ))))))
пОЛ ДНЯ ТУПИЛ
Я что затупил не могу ошибку найти
#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;
}
спасибо, ошибку нашел))))
как выключить отладку приложений в VS2008?Крошится hddlife.exe и постоянно выходит "Вы не желаете отладить приложение?"
POS_troi
24.01.2010, 00:08
http://technet.microsoft.com/ru-ru/library/aa995708%28EXCHG.80%29.aspx
http://technet.microsoft.com/ru-ru/library/aa995708%28EXCHG.80%29.aspx
правильнее http://msdn.microsoft.com/ru-ru/library/k8kf6y2a.aspx
Написал я простенькую програмку на С++, отправил своему другу, он не может открыть, пишет типо не удалось запустить....
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;
}
Krist_ALL
25.01.2010, 20:40
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...
Как мне разобраться с указателями и ссылками?
ссылка на пременную - это синоним по которому к нему можно обратиться
указатель это переменная значениее которой адрес указывающий на адрес содержащий значение переменной. Я для себя это так понимаю. и мне этого хватает.
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...
Как мне разобраться с указателями и ссылками?
Если с англ. нет проблем, тут (http://www.cplusplus.com/doc/tutorial/pointers/) очень понятно описано что-да как.
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...
Как мне разобраться с указателями и ссылками?
Чтобы лучше разобратся с указателями, напиши простенькую прогрумку аля
void mail(void)
{
char *text = "test";
MessageBox(NULL, text, "cap", MB_OK);
return;
}
Потом открой ее в отладчике(OllyDbg) и посмотри как используется указатель на текст.
ЗЫ
Я сам, пока не посмотрел в отладчике, не до конца понимал принцип указателей.
Подскажите хороший ман по указателям и ссылкам.
Прочитал тучу книг.
Прочитал кучу форумов - люди спорят на много страниц чем отличается ссылка от указателя. Я - новичок, набрав в гугле чем оличается ссылка от указателя попадаю на фоурм ixbt где каждый пытается разъяснить чем оличается и такие навороченные коды привдят...
Как мне разобраться с указателями и ссылками?
А что именно не понятно?
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.
Помогите..
Create Precompiled Header (/Yc)
эту опцию выбери, и создастся pch файл. Потом обратно use precompiled header
Create Precompiled Header (/Yc)
эту опцию выбери, и создастся pch файл. Потом обратно use precompiled header
ДА создался, но exe не появился.
F5 нажми. Запустится или нет? Очень сомневаюсь, что ехе не создается.
F5 нажми. Запустится или нет? Очень сомневаюсь, что ехе не создается.
Спасибо, помогло.
Как полностью и нормально принять пакет с помощью winsock? (TCP (HTTP))(C++)
Хотелось бы принять не затрагивая Content-Length, так как была однажды ситуация когда сервер просто не возвращал Content-Length а в конце принятого пакета писалась всякая гадость (к примеру 400 bad request (после 200 ok))
Прием делаю так:
Цикл while + проверка на то что вернула нам функция recv, если значение recv -> NULL или SOCKET_ERROR -> break
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot