Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
15]
16
17
18
19
20
21
22
result=add_values (1, 2); - в воздухе подвис, да и тип не указан, ты б в мейн засунул его что ли.
Вдобавок какая то из букв 'а' написана не на англ...
А нафига там тип указывать ещё раз,если уже указан ?
Line 2: error: stray '\320' in program
compilation terminated due to -Wfatal-errors.
***
буквы тогда убери,
если описываешь ф-ю после main, нужно после инклудов писать прототип ф-ии
попробуй вместо
int add_values (int а, int b) ;
написать
int add_values (int, int) ;
А нафига там тип указывать ещё раз,если уже указан ?
Советую покурить - Область действия переменных;
Все вопросы, которые сейчас задаешь, есть на первых страницах практически любых книг по С.
#include <iostream>
using namespace std;
int add_values (int, int) ;
void main()
{
cout << add_values (1, 2) << endl;
}
int add_values (int a, int b)
{
return (a+b);
}
Это 100% заработает. Кста, про русскую букву были правы :)
Та же ошибка,епт................ща разъебу все эти компили нахрен.
http://codepad.org/8H092bcO
Ты вообще каким компилятором пользуешься?
З.Ы.
Забей на эту херню - юзай нормальный компилятор!
#include <iostream.h>
int add_values (int a, int b)
{
return (a+ b);
}
int main ()
{
cout << " 100 + 200 = " << add_values(100, 200) << endl;
cout << " 500 + 501 = " << add_values(500, 501) << endl ;
cout << "-1 + 1 = " << add_values(-1, 1) << endl;
}
Этот-то пример работает.... а чем отличается,не пойму.
В том-то и дело,что не могу поставить НОРМАЛЬНЫЙ компилятор.То гребаный фрйморк нужен,уже 3 штуки переставил,ему пох.Dev-c++ вообще отказывается компилить...ппц
#include <iostream>
using namespace std;
int add_values (int, int) ;
int main()
{
cout << add_values (1, 2) << endl;
return 0;
}
int add_values (int a, int b)
{
return (a+b);
}
Это уже там работает)
Я так понял,алгоритм такой:
1) Описание функции за пределами функции main().
2) Использование описанной функции в main()
По мне так всё логично,на РНР оч похоже.
Это уже там работает)
А зачем пространство имён юзать,когда и так работает ?
ЗЫ: Так и не понял,в чём была ошибка.Буквы `а` все поправил.
А зачем пространство имён юзать,когда и так работает ?
ЗЫ: Так и не понял,в чём была ошибка.Буквы `а` все поправил.
1. Не используй боян - скачай нормальный компилятор и отпадут подобного рода вопросы :)
Вообще, не все компиляторы разрешают юзать cin\cout и т.д. без std::. Следовательно, дабы не писать больше кода - используют пространство имен. Тут видимо не нужно. И вообще, я впервые вижу, чтобы с типом int у мейна не было обязательного возврата значения оО.
2. Я когда код твой скопировал чтоб редачить - мой компилятор выругался на одну из буков а, я ее заменил английской и все заработало.
гг))) круть.А что та ошибка значит ? Хмм...Ну,хоть что-то на сегодня я понял: в main() нужно обязательно возвращать значения.
Там получается, что void, как возвращаемое значение ф-и main() не допустимо, потому и кидало ошибку.
в main() нужно обязательно возвращать значения.
С типом int - да, с void не нужно)
может книжки почитаешь? это не пхп. тут методом тыка не получится писать. слишком много нюансов. уж лучше смотреть в сторону сишарпа с таким подходом.
Вспоминается как наш препод говорил "Не ломитесь с криком БАНЗАЙ! дальше, пока не освоите то, перед чем его кричите")
З.Ы. Ra$cal прав на 100%
может книжки почитаешь? это не пхп. тут методом тыка не получится писать. слишком много нюансов. уж лучше смотреть в сторону сишарпа с таким подходом.
Интересно,а я что делаю ? Просто мне многогго не понять.Вот и задаю вопросы.Кстати,форум для этого и предназначен,не так ли ? не знаю,как тут остальные,считающие меня каким-то полоумным кретином с кучей невнятноразделённых вопросов,но я иначе не могу,уж извини.
ну если ты пролистаешь страниц этак цать назад то увидишь, что тому же horlyk'у я подробно отвечал на вопросы. Но по его вопросам видно было, что он читает чтото. А у тебя вопросы, которые в первой главе любой книги разжёвываются. Поэтому и возникла идея, что ты решил все вопросы задавать нам, вместо изучения книг и уточнения непоняток тут.
Ну мне тоже писали в принципе чтоб я книги читал :), ток у мну вопросы совсем другие были и я потом понял что хотел сделать то, что не поддается ни одному здравому объяснению). Просто понимаешь, разница в том, что это самые азы, которые в любой книге подробно описываются. Никто же не запрещает задавать вопросы, да и не один человек тебе пример писал + советы :)
Доброго времени суток, подскажите как сохранить число, больше 32 бит, в двух переменных и соответственно потом его прочитать из них.
char num[] = "4294967295000";
unsigned int a[2];
2 Lee_fx
long что ли уже отменили?
А нафига там тип указывать ещё раз,если уже указан ?
может книжки почитаешь? это не пхп. тут методом тыка не получится писать. слишком много нюансов. уж лучше смотреть в сторону сишарпа с таким подходом.
Ну наконец то одна здравая мысль, а я то думал вы и дальше на 5ти страницах будете обсасывать первый пример с книги ))
long что ли уже отменили?
А мне вот студия говорит что размер int и long одинаков (
А если число будет больше 64 бит? оно даже в long long не уместится, хочется его "разгрузить" по 32-х битным переменным. По идее ведь это возможно. Хотелось бы на моем примере посмотреть как.
Можно воспользоваться сторонним классом, подробности тут _http://www.gidforums.com/t-17248.html
Блин, мне самому интересно как это реализовывается, таких классов полно, в исходниках фиг разберешься, вот и спрашиваю тут)
Хотелось бы алгоритм хотя бы на словах.
гугл отменили? ссылка прямо на античат
тыц (http://forum.antichat.ru/nextoldesttothread50394.html)
тыц два (http://algolist.manual.ru/maths/long.zip)
ps: что за мода просить пересказывать на форумах то, что можно самому почитать, но влом. этой теме много статей посвящено, а ты хочешь все до одного поста ужать и выдавить из посетителей. если не понятно - значит или рано, или не особо надо. читай до просветления кароч. будут вопросы конкретные - задавай.
Какие команды для торможения програмы есть кроме system("PAUSE")в компиляторе Dev c++?
как таковых команд нету в с++. это вызов системной функции типа. вообще останавливают вызовом getch или cin.
как таковых команд нету в с++. это вызов системной функции типа. вообще останавливают вызовом getch или cin.
СПС=)
как таковых команд нету в с++. это вызов системной функции типа. вообще останавливают вызовом getch или cin.
Как именно оно пишетса?Я просто только начал и не знаю
(
Как именно оно пишетса?Я просто только начал и не знаю
(
std::cin.get();
getch();
std::cin.get();
getch();
Спс)
Здравствуйте можете сказать почему не компилируется?
// vivodit raznosvetnyi text
#include<conio.h>
void main() {
clrscr();
textcolor(RED);
cprintf("Kajdi \n\r");
textcolor(LIGHTRED); // oranjevyi zamenim alym
cprintf("ohotnik \n\r");
textcolor(YELLOW);
cprintf("jelaet \n\r");
textcolor(GREEN);
cprintf("znat' \n\r");
textcolor(LIGHTBLUE);
cprintf("gde \n\r");
textcolor(BLUE);
cprintf("sidyat \n\r");
textcolor(MAGENTA);
cprintf("fazani!\n\r");
textcolor(LIGHTRAY);
cprintf("\nDl9 zaverweni9 najmite <ENTER>");
getch();
}
а что, в консоли можно цвет изменять? там ведь два цвета - черный и белый. Какую ошибку то пишет?
2Glazz, можно.
Вот простейший пример:
#include <iostream.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
for(unsigned c1=0; c1<=0xF; c1++)
for(unsigned c2=0; c2<=0xF; c2++){
unsigned color=c2+(c1<<4);
SetConsoleTextAttribute(hConsole, color);
cout<<"bgColor: "<<c1<<" textColor: "<<c2<<" Color: "<<hex<<color<<endl;
};
system("PAUSE");
return 0;
}
там и кусорсо можно ставить в нужную координату, и цвет фона менять =) для отладки консоль очень полезная вещь. у меня даж класс был самописный для этого дела, с цветами.
А есть где-то весь перечень встроенных команд консольки? А то я чет гуглил и не нашел, мож просто плохо гуглил...
Умно, а там что искать? Команду system() вообще не находит.
для вендов (http://msdn.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx)
гугл отменили? ссылка прямо на античат
тыц (http://forum.antichat.ru/nextoldesttothread50394.html)
тыц два (http://algolist.manual.ru/maths/long.zip)
ps: что за мода просить пересказывать на форумах то, что можно самому почитать, но влом. этой теме много статей посвящено, а ты хочешь все до одного поста ужать и выдавить из посетителей. если не понятно - значит или рано, или не особо надо. читай до просветления кароч. будут вопросы конкретные - задавай.
Очень познавательно, но, если не заметно, я модно спрашивал о другом. Вопрос в том можно ли разместить, к примеру, 50-ти битное число в нескольких переменных меньшего размера ( как пример в двух unsigned int ), если учитывать что число представлено строкой.
ну а ты пробовал читать эти ссылки? там вроде как дан ответ
Очень познавательно, но, если не заметно, я модно спрашивал о другом. Вопрос в том можно ли разместить, к примеру, 50-ти битное число в нескольких переменных меньшего размера ( как пример в двух unsigned int ), если учитывать что число представлено строкой.
Долго не напрягаясь, написал вот это:
#include <iostream>
using namespace std;
typedef unsigned long int ULI;
void main()
{
char www[] = "1234567899876543219898989898989898989897";
char temp[sizeof(www)/9+1][9];
ULI a[sizeof(www)/9+1];
int i = 0, j = 0;
for(int j0 = 0; i < sizeof(www)/9+1; j0++, j++)
{
temp[i][j] = www[j0];
if(j == 8)
{
j = -1;
a[i] = atoi(temp[i]);
cout << a[i];
i++;
}
}
cout << endl;
}
ImNaruto
15.08.2009, 14:52
у мя наверн тупой вопрос по сравнению с другими:
как сделать так чтобы после конца кода (когда говорят нажмите кнопку чтобы выйти)
начинать сначала?
у мя наверн тупой вопрос по сравнению с другими:
как сделать так чтобы после конца кода (когда говорят нажмите кнопку чтобы выйти)
начинать сначала?
Используй рекурсию.
#include <iostream>
using namespace std;
int main()
{
cout << "www\n";
system("PAUSE");
return main();
}
dinar_007
15.08.2009, 15:18
у мя наверн тупой вопрос по сравнению с другими:
как сделать так чтобы после конца кода (когда говорят нажмите кнопку чтобы выйти)
начинать сначала?
while (1) {
.....
}
Используй рекурсию.
#include <iostream>
using namespace std;
int main()
{
cout << "www\n";
system("PAUSE");
return main();
}
Тупее не придумаешь... Кто за стеком будет следить?!
Тупее не придумаешь... Кто за стёком будет следить?!
Сразу становится ясно о понятиях человека :)
Используй рекурсию.
#include <iostream>
using namespace std;
int main()
{
cout << "www\n";
system("PAUSE");
return main();
}
Осторожно, ведь ты ничего не возвращаешь.
Нету возможности выйти из программы.
Осторожно, ведь ты ничего не возвращаешь.
Нету возможности выйти из программы.
Ну я маленький примерчик привел для Lee_fx.
Кстати, а чего, если постоянно нажимать или зажать ентер, постоянно растет потребление памяти? с чем это связано?
ImNaruto
15.08.2009, 16:36
if (quit == 2)
exit
какая функция должна быть вместо exit?
ImNaruto
15.08.2009, 16:44
ага! я понял что гдето рядом !!!
+а калькулятор (+-*/) в 4 день изучения си++ это норм или по-лохански(учусь по книге си ++ за 21 день)?
+ как делать блоки наподобии main()?
ага! я понял что гдето рядом !!!
+а калькулятор (+-*/) в 4 день изучения си++ это норм или по-лохански(учусь по книге си ++ за 21 день)?
+ как делать блоки наподобии main()?
Может ты для начала книжку почитаешь, а не будешь спрашивать тут каждую минуту?
ImNaruto
15.08.2009, 17:25
в книге говориться тока про функция void но там нельзя использовать return!поэтому спрашиваю!
ну а ты пробовал читать эти ссылки? там вроде как дан ответ
Я думал не о переводе в другую СС, хотелось бы сделать что-то типа
char num[] = "....";
// в двоичном коде например 00010001 11111111 10010001 00100101 11110001
Это число в 32 бита не влезает, но в 64 поместится, вот и хотелось бы его разместить в двух блоках по 32
uint a = 00000000 00000000 00000000 00010001
uint b = 11111111 10010001 00100101 11110001
Такое возможно?
Я думал не о переводе в другую СС, хотелось бы сделать что-то типа
char num[] = "....";
// в двоичном коде например 00010001 11111111 10010001 00100101 11110001
Это число в 32 бита не влезает, но в 64 поместится, вот и хотелось бы его разместить в двух блоках по 32
uint a = 00000000 00000000 00000000 00010001
uint b = 11111111 10010001 00100101 11110001
Такое возможно?
Ты мой пост читал?
Ты мой пост читал?
читал, я же не это имел ввиду)
получаю я почту по протоколу РОР3
например
RETR 3
ответ сервера я сохраняю в буфер char buff[1024];
и мне необходимо записать в файл, чтобы все было в читабельном виде, после записи получается следующее
Return-path: <xxxxxxxx@mail.ru>
Received: from mail by f252.mail.ru with local
id 1MRkFs-0009dR-00
for yyyyyyyy@mail.ru; Fri, 17 Jul 2009 14:01:28 +0400
Received: from [94.51.137.194] by win.mail.ru with HTTP;
Fri, 17 Jul 2009 14:01:28 +0400
From: =?koi8-r?Q?=ED=C1=D2=C9=CE=C1_=FE=C5=DE=CE=C5=D7=C1?= <xxxxxx@mail.ru>
To: =?koi8-r?Q?=EF=CC=D8=C7=C1_=F7=C9=CB=D4=CF=D2=CF=D7=CE=C1 ?= <yyyyyyyy@mail.ru>
Subject: =?koi8-r?Q?Re=3A_?=
Mime-Version: 1.0
X-Mailer: mPOP Web-Mail 2.19
X-Originating-IP: [94.51.137.194]
Date: Fri, 17 Jul 2009 14:01:28 +0400
References: <E1MRU0n-00075w-00.yyyyyyy-mail-ru@f187.mail.ru>
X-Mru-Data: 444:1:1:32:32:1
In-Reply-To: <E1MRU0n-00073w-00.yyyyyyy-mail-ru@f187.mail.ru>
Reply-To: =?koi8-r?Q?=ED=C1=D2=C9=CE=C1_=FE=C5=DE=CE=C5=D7=C1?= <xxxxxx@mail.ru>
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 8bit
Message-Id: <E1MRkFs-0006dR-00.xxxxx-mail-ru@f252.mail.ru>
X-Spam: Not detected
X-Mras: Ok
йЪЧЕЭЕОЙЕ рПМХЮБФЕМШ РМБФЕЦБ: еж ппп "пТЙЖМЬКН лПУНЕФЙЛУ" 4
вБОЛ рПМХЮБФЕМС: хТБМШУЛЙК ВБОЛ ув тж мЕОЙОУЛПЕ пув 11
йоо 7704270172 вйл 046577674
л/УЮ: 3 0 1 0 1 8 1 0 5 0 0 0 0 0 0 0 0 6 7 4
уЮЕФ РПМХЮБФЕМС: 4 0 7 0 2 8 1 0 9 1 6 0 9 0 1 0 4 7 5 1
оБЙНЕОПЧБОЙЕ РМБФЕЦБ: ЪБ ФПЧБТ дЙУФТ ____________________
рП ОБЛМ _______________________________________
рМБФЕМШЭЙЛ: _______________________________________________
Как я понимаю проблемы с кодировкой, каким образом можно перекодировать из koi8-r в win1251?
ps пишу в VS,
может быть есть какие-нибудь готовые либы для перекодировки?
И еще один вопросик, точнее просьба, если есть подкинте примерчиков на С, как раскодировать и сохранить аттач
пример:
Content-Disposition: attachment; filename="kvitanciqSberbank.doc"
Content-Transfer-Encoding: base64
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAAgAAAAAAAAAAA
EAAAggAAAAEAAAD+////AAAAAH4AAAB/AAAA////////////////////////////////////////
AQD+/wMKAAD/////BgkCAAAA
AADAAAAAAAAARh8AAADE7urz7OXt8iBNaWNyb3NvZnQgT2ZmaW NlIFdvcmQACgAAAE1TV29yZERv
YwAQAAAAV29yZC5Eb2N1bWVudC44APQ5snEAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAA
//много вырезано
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A=
------nxcrLGJQ-RzITuat2OupmhXsL:1249303664--
про примерчик - гугл на тему "base64 c"
http://ru.wikipedia.org/wiki/Base64 - вот почитай для общего развития
по поводу кодировки - погуглил и нашел такое
http://www.rsdn.ru/forum/src/257031.flat.aspx
неужели так сложно гуглом воспользоваться? тем более яхз нужно ли тебе в юникод или анси. хотя одно в другое после норм конвертации преобразовать не проблема.
кароч учись юзать гугл.
ps: не пробовал гуглить сорцы для работой с почтой? почему то мне кажется, что их просто до сами знаете чего...
Я видел, что некоторые приложения запускаются каким-то образом что на них не срабатывает OpenProcess. Как???
Процесс скрывает себя. Так часто ведут себя хорошие бэкдоры. Процесс есть, но информация от ядра обрабатывается и изменяется, и поэтому он становится невидимым.(Если ты об этом)
банальный хук в ядре на ZwOpenProcess
NTSTATUS NewZwOpenProcess (OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId OPTIONAL)
{
HANDLE ProcessId;
if ((ULONG *)ClientId > MmUserProbeAddress) return STATUS_INVALID_PARAMETER;
__try
{
ProcessId = ClientId->UniqueProcess;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return STATUS_INVALID_PARAMETER;
}
if (ProcessId == ProtectedPid)
{
return STATUS_ACCESS_DENIED;
}
else
{
return TrueZwOpenProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
}
}
........................................
switch (*NtBuildNumber)
{
case 2195 : //win 2k
OpenProcId = 0x06A;
break;
case 2600 : //win xp
OpenProcId = 0x07A;
break;
default :
return STATUS_NOT_IMPLEMENTED;
break;
}
TrueZwOpenProcess = NTCALL(OpenProcId);
__asm
{
cli
mov eax, cr0
mov CR0Reg,eax
and eax,0xFFFEFFFF
mov cr0, eax
}
NTCALL(OpenProcId) = NewZwOpenProcess;
__asm
{
mov eax, CR0Reg
mov cr0, eax
sti
}
Почему сразу хук. Может человек привилегии не запросил для своего процесса. Деталей маловато в вопросе.
-m0rgan-
19.08.2009, 00:38
Привет всем, подскажите, как работать с большими числами в С++ ?
Нажно чтото типа:
...
int i = 1;
while(i<=1000000000000000000000000000000000000000000000000 00000000000000000000000000000000)
{
++i;
cout<<i;
}
...
Но увы инт принимает только 20 цыфр, как быть?
ищи тут (http://sourceforge.net/search/?type_of_search=soft&words=Arbitrary-precision+arithmetic&search=Search)
Первый же поиск в вики дал такое...
http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries
почему нельзя присоединить к объекту класса string - цифру?
int n = 5;
string str = "test";
str.append(n);
cout << str;
string& append ( const string& str );
Appends a copy of str.
string& append ( const string& str, size_t pos, size_t n );
Appends a copy of a substring of str. The substring is the portion of str that begins at the character position pos and takes up to n characters (it takes less than n if the end of string is reached before).
If the position passed is past the end of str, an out_of_range exception is thrown.
string& append ( const char * s, size_t n );
Appends a copy of the string formed by the first n characters in the array of characters pointed by s.
string& append ( const char * s );
Appends a copy of the string formed by the null-terminated character sequence (C string) pointed by s. The length of this character sequence is determined by the first ocurrence of a null character (as determined by traits.length(s)).
string& append ( size_t n, char c );
Appends a string formed by the repetition n times of character c.
Потому и нельзя :)
int n = 5;
string str = "test";
str.append((char *)n);
cout << str;
если только так и это уже будет не число. или так
int n = 5;
char f[5];
string str = "test";
itoa(n,f,10);
str.append(f);
cout << str;
str.append((char *)n);
так не получается, пробовал
ещё вопрос:
descr = new char[100];
strcpy(descr, "std");
if(descr == "std")
...
условие не срабатывает
как сравнить выделенную память со строкой?
книжки почитать...
strcmp юзай
ps: локальные строки делать динамическими с фиксированной длиной - бред. если размер тебе известен - делай фиксированный массив.
descr это указатель и содержит только адрес выделеной памяти. Если хочеш сравнить юзай strcmp или сам посимвольно перебери и сравни. Как то так:
int FindString(char *str1,char *str2)
{
int nstr1,nstr2,i,j,nstr,sstr;
nstr1=strlen(str1);
nstr2=strlen(str2);
if(nstr1>nstr2)
{
nstr=nstr1-nstr2;
for(i=0;i<nstr;i++)
{
sstr=0;
for(j=0;j<nstr2;j++)
{
if(str1[j+i]==str2[j])
{
sstr++;
}
}
if(sstr==nstr2)
{
return 1;
}
}
}
else
{
return -1;
}
return 0;
}
почему нельзя присоединить к объекту класса string - цифру?
если только так и это уже будет не число. или так
int n = 5;
char f[5];
string str = "test";
itoa(n,f,5);
str.append(f);
cout << str;
Проще использовать для преобразования stringstreams )
помогите разобраться
если создавать объект обычным способом - всё нормально
а если через конструктор-копировшик - то ошибка
http://www.sendspace.com/file/6c3idu
в архиве класс и пример, показывающий ошибку (самая последняя строка)
Все же не поленился и скачал, и так ...
descr = new char;
strcpy(descr, "empty");
Это простите что такое? ))
По вашему строка "empty" имеет длину в 1 символ?
Аналогично
object.setDescr("description");
Выделяем память не под массив а удаляем как массив delete [] descr;
Поставьте descr = new char[100]; (или же другую нужную длину).
П.С. И вообще в подобных случаях ну очень хорошо помогает отладчик )
блин, а мне тока что здесь же говорили что создавать динамический массив с известным размером глупо
а как же тогда создавать массивы, если длина неизвестна изначально?
char *mas;
int a;
printf("a= ");
scanf("%d",&a);
mas = new char[a];
delete(mas);
mas = 0;
вот простой пример как
Очень наглядно, что такое указатели и как выделяется память, можно посмотреть в отладчике.
блин, а мне тока что здесь же говорили что создавать динамический массив с известным размером глупо
а как же тогда создавать массивы, если длина неизвестна изначально?
Есть очень удобный класс string для строк, если не известно кол-во элементов - есть не менее удобный контейнер vector )
блин, а мне тока что здесь же говорили что создавать динамический массив с известным размером глупо
а как же тогда создавать массивы, если длина неизвестна изначально?
Тот кто это сказал, видимо имел в виду создание массива под буфер для чтения из файла или сокета, например char buff[1024] то есть в этом случае ты знаешь что не будешь читать туда более 1024. А когда длина неизвестна (например нужно скачать страницу в память) то перевыделяешь память, затем копируешь туда содержимое буфера и так далее. Почитай книгу по C без ++.
блин, а мне тока что здесь же говорили что создавать динамический массив с известным размером глупо
а как же тогда создавать массивы, если длина неизвестна изначально?
лол. ты не находишь, что ты говоришь о двух разных видах массивов? Читайте блиа книжки, в первых уроках все это разжовывается. Ответ получишь быстрее, чем на форуме, с примерами и шутками прибаутками от автора.
как сравнить два массива типа char name1[100]; ? ато блин что я тока неперепробовал мине тока вот етото страшныи способ пришол в голову но чето он мине както ненравится некрасиви какоито
#include <iostream>
using namespace std;
int main ()
{
char array1[10];
char array2[10];
cin>>array1;
cin>>array2;
int i=0,j=0;
for (;i<sizeof(array1)&&i<sizeof(array2);i++)
{
if(array1[i]==array2[i])
j++;
}
if(j==i)
cout <<"same name\n";
else
cout<<"not same name\n";
system ("pause");
return 0;
}
mailbrush
21.08.2009, 14:13
Создаю консольное приложение (т.е. приложение без формы) с TTcpClient.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <Sockets.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
TTcpClient *TcpClient1;
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TcpClient1 = new TTcpClient(this);
return 0;
}
//---------------------------------------------------------------------------
И получаю ошибку 'this' can only be used within a member function c++
Первый раз кодю в Borland C++, говорят, он лучше, всегда кодил в Delphi:)
В чем моя ошибка?
проблема та же, что и у всех - книжки не читаем. читаем главу что есть this и почему он не валиден в функциях, не принадлежащих классам и в статических методах класса. c++ - не делфи. тут нада немного думать и немного знать...
mailbrush
21.08.2009, 16:50
Вместо this поставил текущий объект, т.е. TcpClient1 :)
даите пожауиста хорошое пособие по связаным спискам я искал в гоогле но чето немагу ничо талковова наити
Поищи в данном топике. Совсем недавно обсуждалась тема.
нужен человек, хорошо знающий С++, чтобы дописать и исправить три небольших программки на голых плюсах
подробности в аське 867766 90
Объясните плз принцип перегрузки оператора [] и совместное использование его с оператором = , а то никак догнать не могу как он работает...
class Animal
{
public:
Animal() {}
Animal(int a): age(a) { }
~Animal() { };
int Get() { return age; }
private:
int age;
};
template <class T>
class Array
{
public:
Array() { size = 10; pType = new T[size]; for(int i = 0; i < size; i++) { pType[i] = 0; } }
Array(const Array& rhs);
~Array() { delete [] pType; }
int GetSize() {return size;}
Array& operator = (const Array& rhs);
T& operator [] (int offset) { return pType[offset]; }
private:
T* pType;
int size;
};
template<class T>
Array<T>& Array<T>::operator =(const Array &rhs)
{
if(this == &rhs)
return this;
delete [] pType;
pType = new T[rhs.GetSize()];
for( int i = 0; i < rhs.GetSize(); i++)
pType[i] = rhs[i];
return *this;
}
void main()
{
Array<int> arr;
Array<Animal> zoo;
Animal* pAnimal;
for(int i = 0; i < 10; i++)
{
arr[i] = i*3;// !Начиная с этого места!
pAnimal = new Animal(i*2);
zoo[i] = *pAnimal;
}
}
Что вызывается первым, а что вторым(с метки в коде)
и какая цепочка следует?
встаешь на строку
zoo[i] = *pAnimal;
и жмешь Step Into и наблюдаешь, как это все работает. Увидишь и создание копии объекта и порядок вызова операторов.
встаешь на строку
zoo[i] = *pAnimal;
и жмешь Step Into и наблюдаешь, как это все работает. Увидишь и создание копии объекта и порядок вызова операторов.
опа, дошло все сразу! пасиб) плохо что не писалось в книге про эти примочки. Я обычно F10 постоянно при отладке использовал - хз где узнал об этом.
хелп, срочно
нужен исходник на pure c
задача: выполнить системную команду(unix), сама команда берется как аргумент, и возвращает результат выполнения
т.е на перле я бы написал system($_[0]) или system($ARGV[0])
хеелп(
да по сути так же
#include <stdlib.h>
int _tmain(int argc, char* argv[])
{
system(argv[1]);
return 0;
}
-m0rgan-
23.08.2009, 22:49
Привет, мытаюсь создать оконное приложение на С++
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MessageBox(NULL, "Простейшая программа!","WinAPI App", 0); //сообщение
return 0;
}
Компилятор ругается:
1.cpp
c:\documents and settings\********\мои документы\visual studio 2008\projects\w\w\1.cpp(8) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [22]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Build log was saved at "file://c:\Documents and Settings\********\Мои документы\Visual Studio 2008\Projects\w\w\Debug\BuildLog.htm"
w - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Юзаю Visual Studio 2008
И посоветуйте пожалуйста книгу по программированию на С++ с WinAPI
Зарание благодарен.
VS подефолту считает что все API юзают wide char
по этом настрйо в проекте чтобы был не юникод и не расширенные строки.
Или пиши функцию MessageBoxA
или если юзаеш MessageBoxW то перед стркоами пиши букву L типа
L"строка"
ставь L перед строками или TEXT("blablabla")
MessageBox(NULL, L"Простейшая программа!",L"WinAPI App", 0); //сообщение
-m0rgan-
23.08.2009, 23:15
slesh,Ra$cal - благодарю, заработало!
А что на счет книги, а то как то страшно выглядит этот АПИ, да и консольные ф-и в нем не фурычут =\
И как быть если мне нужно вывесть из переменной данные:
int a = 111;
MessageBox(NULL, a,L"WinAPI App", 0); //сообщение
тогда тебе нужно из числа в строку и строку уже выводить.
можно заюзать к примеру sprintf() чтобы в буфер загнать по шаблону
-m0rgan-
24.08.2009, 00:45
С этим более мение понятно..
Но вот захотел потестить ф-ю GetDlgItemText(), но она теребует хендл родительского окна, то есть окна с которого она вызывается, напимер CreateWindow. Как его узнать?
GetParent, FindWindow. Зависит от того, чье это окно. Если твое - то ты должен знать его. Если в чужом процессе - можно найти
ImNaruto
24.08.2009, 15:29
multiple definition of 'abonent::abonent()'
first defined here
Че за ошибка?
видимо конструктор объявлен не один раз.
подскажите, как можно нормально загрузить текстовый файл в массив типа string?
на данный момент хотелось бы создать массив указателей на объекты типа string, но я толком не знаю как это сделать. string **strs; или string *strs[]; - не то.
и проблема в том, что файл режется по пробелам, а не по переводам строк.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string strings[1000];
string cookies;
ifstream fin("cookies.txt");
if(!fin)
{
cout << "cant open cookies.txt" << endl;
return 1;
}
int n = 0;
while(!fin.eof()){
fin >> strings[n];
cout << strings[n] << endl;
n++;
}
fin.close();
return 0;
}
Дикс,
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string * strings = new string[1000]; //Массив указателей на стринг.
string cookies;
ifstream fin("123.txt");
if(!fin)
{
cout << "cant open file" << endl;
return 1;
}
int n = 0;
while(!fin.eof()){
getline(fin, strings[n]); //Читает строку.
cout << strings[n] << endl;
n++;
}
fin.close();
return 0;
}
mailbrush
24.08.2009, 23:55
Есть ли готовая функция копирования подстроки из строки, когда известен начальный и конечный символ подстроки? Объясню. Есть строка
Hello_world!
Начальный символ 6, конечный 11. Функция должна возвратить слово world.
Ну или же не возвращать, а записывать в переменную, всеравно...
-m0rgan-
25.08.2009, 00:12
уже разобрался)
во первых чтобы бесконечно выводить можно просто написать while(true)
во-вторых месаджбокс синхронный и останвливает поток, вызвавший функцию. нажми он и выскочит еще один. если хочешь много много окошек делать - или создавай потоки и в них уже вызов месаджбокса. вариант второй - в ресурсах создай окошко и создавай его немоадальным через апи CreateDialog
-m0rgan-
25.08.2009, 00:30
Да меня сам принцип работы интерисовал)
А возможно сделать чтото типа такого:
.................................................. ....................................
int MessageBox( HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
.................................................. ....................................
Допустим мы имеем:
MessageBox(NULL,L"TEST",L"CAPTION",MB_OK);
И сделать условие типа:
if(lpText == "TEST")
{
............
}
У меня почемуто не получалось, говорит что lpText не объявлен, но он ведь должен объявлятся в самой функцие, не так ли?
=)) советую все таки книжки для начинающих почитать. что такое область видимости, параметры по значению и по ссылке. имя параметра, принимаемого функцией, использовать у себя нельзя. иначе бы ты тупо запарился выбирать незанятые имена, да и ни к чему такое. хочешь проверить что передаешь - делай переменную со строкой, передавай ее и проверяй.
char text [] = {"TEST"};
MessageBox(0, text, "caption", MB_OK);
if(strcmp(text, "TEXT") == 0{
...
}
и готовься к головной боли со строковыми функциями. ибо для анси, юникод и _TEXT свои функции... и вообще используй класс string. но для начала почитай книжки. не учится с++ методом глупого набирания кода и мольбы о работе.
Есть ли готовая функция копирования подстроки из строки, когда известен начальный и конечный символ подстроки? Объясню. Есть строка
Hello_world!
Начальный символ 6, конечный 11. Функция должна возвратить слово world.
Ну или же не возвращать, а записывать в переменную, всеравно...
char * pczHw = "hello world!";
char * pczBuff[100];
ZeroMemory(pczBuff,100);
memcpy(pczBuff,pczHw+6,5);
Memcpy кпирует 5 символов с 6, т.е. с 6 по 11.
mailbrush
25.08.2009, 11:47
Спасибо конечно, но проблему решил :)
string substr(const string &str, int start, int length)
{
if (start < 0 ) start+=str.length();
if (length < 0 ) length=str.length()+length-start;
if (length < 0 ) return "";
return str.substr(start,length);
}
Возникла новая проблема с winsock или _beginthread - точно не знаю. Если вызывать вот это http://forum.antichat.ru/showpost.php?p=373579&postcount=6 один раз, или по очереди (я изменил буффер до 5120 вместо 1023), товсе ок, принимается 5кб, но если же с помощью _beginthread(Thread, 0, NULL); //Thread - void Thread (void *a) {http://forum.antichat.ru/showpost.php?p=373579&postcount=6} то принимается 2кб... В чем может быть проблема? УРЛ/ip подключения есс-но сменил.
Тебе именно 5 кб нужно принять? Пропробуй через while принимать пока не получишь 5 кб.
Получишь весь ответ полностью...
char response[1024]; // буффер под ответ
while( recv(my_sock,(char*)response,sizeofresponse),0)!=S OCKET_ERROR && strlen((const char *)response)!=0)
{
printf("%s\n",response);
ZeroMemory(response,sizeof(response));
}
Если нужно получать часть ответа и рвать соеденение - можно попробывать считать полученные данные...
#define max_response_len 5120 // 5кб))
char response[1024]; // буффер под ответ
int response_len = 0;
while( recv(my_sock,(char*)response,sizeofresponse),0) != SOCKET_ERROR && strlen((const char *)response)!=0 && response_len < max_response_len)
{
printf("%s\n",response);
response_len+=strlen((const char *)response);
ZeroMemory(response,sizeof(response));
}
озникла новая проблема с winsock или _beginthread - точно не знаю.
Код в студию ...
2 Smapt ппц код... && strlen((const char *)response)!=0 вот это ваще лишнее int recv возвращает количество принятых байт его и нужно проверять
вообще чтобы точно в своей программе быть уверенем приняли ли вы все или отправили все нужные данные лучше пользоватся такими функциями вместо recv и send
//---TCP/IP функции
// отослать ВСЕ ... - правильная функция
int sendall(SOCKET s, char *buf, int len, int flags)
{
int total = 0;
int n;
while(total < len)
{
n = send(s, buf+total, len-total, flags);
if(n == -1) { break; }
total += n;
}
return (n==-1 ? -1 : total);
}
// принять ВСЕ ... - правильная функция
int recvall(SOCKET s, char *buf, int len, int flags)
{
int total = 0;
int n;
while(total < len)
{
n = recv(s, buf+total, len-total, flags);
if(n == -1) { break; }
total += n;
}
return (n==-1 ? -1 : total);
}
2Gar|k, ну да, в теории ты прав... а на практике у меня получалось что сервер принимающий без "&& strlen((const char *)response)!=0" зацикливался при некоректном отключении клиента :confused: (например при плохом сетевом соеденении)... Понимаю, звучит это как-то бредово но нечего другого кроме strlen не помогло.
mailbrush
25.08.2009, 13:11
Такс... Проблему решил :) С циклом все ок работает. Но опять новая проблема =\
void BlaBlaBla( void *a)
{
int i;
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i).c_str(),"tfile.ru"); // тут орет invalid pointer addition.
i++;
}
void Get(char *url, char *host)
{
BlaBlaBla
}
Задолбали эти типы данных в c++ =\ Конвертировать только :) Как это решить?
void BlaBlaBla( void *a)
{
int i;
Get("tfile.ru","/forum/profile.php?mode=viewprofile&u=%d",1000+i);
i++;
}
void Get(char* host, char * Format, ...)
{
va_list ap; // For arguments
va_start( ap, Format );
int buff_size = _vscprintf(Format,ap)+1;
char * buff = new char[buff_size];
vsprintf(buff,Format,ap);
//В переменной buff будет строчка "/forum/profile.php?mode=viewprofile&u=1000" (или не 1000 зависит от того что передашь)
va_end ( ap );
delete[] buff;
}
mailbrush
25.08.2009, 13:37
void Get(char* host, char * Format, ...)
1. Вместо троеточия что?
2. Теперь ошибка, что ф-ции нету _vscprintf.
<stdio.h> подключена? Нужно именно проеточие... Функция будет работать по принципу функции printf, в переменную format передаётся "маска" напимер "name %s age %d\n" а в "троеточие" передаётся набор параметров:
char * name = "nikolay";
int age = 18;
printf("name %s age %d\n",name,age);
//выведит строку "name nikolay age 18"
точно так же будет работать и твой Get.
mailbrush
25.08.2009, 14:01
Подключена.
ЗЫ: Работаю в Borland C++ Builder 6
Билдера нету под рукой... но попробуй так:
void BlaBlaBla( void *a)
{
int i;
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i),"tfile.ru");
i++;
}
void Get(String url, char *host)
{
BlaBlaBla
}
1. Вместо троеточия что?
Как уже не раз говорилось лучше почитать пару книжек а не набирать говнокод и молится что бы он работал
mailbrush
25.08.2009, 14:10
Как уже не раз говорилось лучше почитать пару книжек а не набирать говнокод и молится что бы он работал
Типа обиделся, что + не поставил? Не надо отсылать меня к книжкам. Обрати внимание на название темы "[c/c++] Новичкам: задаем вопросы". Была бы твоя воля, ты бы переименовал "[c/c++] Новичкам: НЕ задаем вопросы - читаем книги!".
На правах оффтопа ))
Типа обиделся, что + не поставил?
Мне вообще плевать на репу, это далеко не показатель чьих то знаний
Просто смотрю на все эти вопросы и плакать хочется, на все твои вопросы есть ответы на первых 10 страницах гугла + 100 первых стр. любого учебника по с\с++
Я рад помочь если где то что то не ясно или не понятно и ответа нигде нет, а тут смотришь большинство постов в стиле "хочу написать что то крутое, да вот не знаю чем int от char отличается" )
mailbrush
25.08.2009, 14:32
Поверь, я бы не задавал вопросы, не нагуглив их.
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i).c_str(),"tfile.ru"); // тут орет invalid pointer addition.
Ты пытаешься сложить два указателя на строки, а не их самих это не пхп, для конкатенации есть специальная ф-ция strcat() и если бы ты удосужился почитать хоть немножко любой учебник эти вопросы бы сразу отпали.
mailbrush
26.08.2009, 10:40
Еще вопрос, есть код:
int id = 0;
void Thread( void *a)
{
Get(IntToStr(1000+id).c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
for(i=0;i<=1;i++)
_beginthread(Thread, 0, NULL);
}
//---------------------------------------------------------------------------
Вобщем я пишу парсер. Мне надо, чтобы каждый поток отдельно парсил аккаунты. id++ не поканает тут. Как реализовать это?
void Thread( void *a)
{
int mid;
mid = id++;
Get(IntToStr(1000+mid).c_str());
}
Или как вариант можеш юзать синхронизацию при изменениии. или интерлоки юзать
mid = InterlockedIncrement(&id) - 1;
т.е. id увеличится 100% на 1 и вернется его текущее значение. от которого ты отнимиш 1 чтобы получить предыдущее. Антерлок онснован на атомарном доступе. т.е. блокировка шины памяти идет и в этоге никто другой не сможет изменить значение.
В этоге такая конструкция (без учета того что это вызов апишки)представляет собой такой код:
mov ecx,[esp+4] ; ecx = адресу переменной X
mov eax,1
lock xadd [ecx],eax; блокирем шину памяти, прибавляем значение регистра eax к тому участку памяти где хранится X а предыдущее значение закидываем в eax.
inc eax ; увеличиваем eax на 1 - хз зачем MS это делает. сам не понимаю. Типа вернет не старое значение а новое. тупость
т.е. даже если после lock xadd [ecx],eax выполнение получит другой поток, то всё будет нормально потому что значение хранится в регисте, а при смене потока автоматом сохраняются значения всех регистров. И потом уже данные будут браться не их паременной X а из регистра eax.
темболее что lock xadd [ecx],eax не может прерваться на половине выполнения. И даже если у тебя многопроцессорная система, то всё равно потоки другова процессора не смогут в этотже момент времяни изменить значение переменной.
Вот такаявот хитро-простая синхронизация может быть сделана
Вобщем я пишу парсер. Мне надо, чтобы каждый поток отдельно парсил аккаунты. id++ не поканает тут. Как реализовать это?
я так понял тебе нужно передавать в каждый поток переменную id, каждый раз инкрементируя ее. Для этого нужно почитать тут: http://msdn.microsoft.com/en-us/library/kdzttdcb%28VS.71%29.aspx
Дальше есть неколько замечаний:
- название функции должно отображать то, что она делает а не особенности ее реализации. Thread - так функцию никто не называет. То же касается и Get. Я например не уверен что вообще понял твой вопрос именно из-за дурацких названий функций. переменная 'a' вообще супер...
- писать сетевые приложения на потоках не стоит, это приводит к потреблению кучи ресурсов. Юзай асинхронные сокеты, тем более в windows полно их разновидностей
- хотел еще сказать что писать на борланд билдере не стоит вообще.. но тут вроде это уже говорили.
- писать сетевые приложения на потоках не стоит, это приводит к потреблению кучи ресурсов.
Сетевые какраз и должны работать на потоках потому как работа с сетью - это самое медленное что может быть.
Или если тебя устраивает скорость улитки, то вперед!
Если не юзать потоки то тогда придется тебе работать с неблокируемыми сокетами. Это конечно удобно, но довольно проблематично для новечков.
CPU C2D + Win2k3 и 500 тредов работы с сетью особото и не наггружают сервак зато дают скорость в 250 раз быстрее чем в один поток. потому как даже если у тебя мего скоростной канал, то ты идут большие задержки при ответе сервера. А если данные придут когда поток не выполняется, то они будут находиться в системном буфере и потом благополочку считаются из него. В современных условиях потеря памяти в 100 мб при хз каком кол-ве потоков - это неиграет роли вообще.
ога при достаточно широком канале потоков может быть очень и очень много. CPU C2D + Win2k3 - не у всех такая производительность. Интересно что подумает об авторе программы человек у компа которого оперативной памяти допустим 128. И если софт пишется не только для себя то было бы разумно потратить пару часов на изучение неблокирующих сокетов - повышение производительности капитальное
если оперативы мало нада смотреть в сторону пула потоков. он как раз предназначен для балансирования потребления ресурсов\скорости работы потоков.
ps: вроде как в буст все планировали добавить. но чет так и не посмотрел есть он там или нет...
Всем привет.Очень нужен хороший учебник по си,поскольку в библиотеках не нашёл.Также компилятор не помешал бы.Есть что-нибудь хорошее(исключая древние компильки).
POS_troi
27.08.2009, 20:06
gcc как компилятор
Линукс как мечта.У меня винда.К тому же,в универе мы прогать бум на старье.А дома нужно нормальное...
Как лучше всего из программы в юзермоде вызвать функцию из моего драйвера?
Что будет если я например в XP SP3 сделаю int 2eh вместо SYSENTER?
2 ntldr
1) в DriverEntry пишеш
NTSTATUS st;
PCWSTR dDeviceName = L"\\Device\\DRVNAME";
PCWSTR dSymbolicLinkName = L"\\DosDevices\\DRVNAME";
RtlInitUnicodeString(&DeviceName, dDeviceName);
RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName);
st = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &deviceObject);
if (NT_SUCCESS(st)) st=IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
if (!NT_SUCCESS(st)) return STATUS_DRIVER_INTERNAL_ERROR;
DriverObject->DriverUnload=DriverUnload;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverDispatcher;
другими словами регаешь устройство.
DriverDispatcher - функция обработчик запросов к устройству. В ней ты будеш обрабатывать IOCTL запросы
типа
NTSTATUS DriverDispatcher(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
NTSTATUS status=STATUS_SUCCESS;
PIO_STACK_LOCATION irpStack;
irpStack = IoGetCurrentIrpStackLocation (Irp);
Irp->IoStatus.Information=0;
if (irpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL)
{
if (irpStack->Parameters.DeviceIoControl.IoControlCode==IOCTL_QU ERY)
{
DPRINT("QUERY");
тут ты делаеш всю обработку. Короче читай работу с дровами
} else status = STATUS_INVALID_DEVICE_REQUEST;
}
Irp->IoStatus.Status = status;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return status;
}
А в проге открываеш файл
CreateFile("\\\\.\\DRVNAME) и через DeviceIoControl отправляй запросы дрову.
PS - IOCTL_QUERY это моя буфкция обработчик которая строится так:
#define IOCTL_QUERY CTL_CODE(FILE_DEVICE_UNKNOWN, 0x01, METHOD_OUT_DIRECT, FILE_ALL_ACCESS)
METHOD_OUT_DIRECT значит прямой доступ к выходному буферу(без использования промежуточного)
Это всё описано в книге Солдатов В.П. Программирование драйверов Windows.
2) врядли будет пахать int 2eh потому как он устанавливается как дань традициям, но всё равно юзается тока sysenter если винда начиная с XP и проц начиная с P2
denisov21g21
28.08.2009, 10:57
служба поддержки VDS manager
591-493-245
Линукс как мечта.У меня винда.К тому же,в универе мы прогать бум на старье.А дома нужно нормальное...
mingw как порт gcc под винду )
Mr.Sylar
28.08.2009, 13:06
:confused: :confused: :confused: Народ, я совсем недавно начал изучать С++, объясните, что такое функция и как к ней обращаться заранее спасибо!!! :confused: :confused: :confused:
agrofyl2
28.08.2009, 16:06
Функция - http://www.google.com/search?&q=define:%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8 F&
Обратится - просто function(аргументы)
POS_troi
28.08.2009, 16:34
В любой части программы - после того места где описана сама функция
вставляеш
function_name() - если функция без аргументов (function_name - имя функции- например Main)
или
function_name(аргумент1 , Аргумент2, .... и т.д.) - если с аргументами.
Сама функция выглядит
int Summa(int x, int y)
{
int z;
z = x+y;
return z;
}
Вызов в свою очередь будет происходить так
int result;
result = Summa(4,6);
В итоге в result будет сумма чисел 4 и 6.
Извиняюсь - как всегда не обновил страницу перед ответом.
Обратится - просто function(аргументы)
не обязательно, функция может быть и без аргументов.
ImNaruto
28.08.2009, 16:50
Ктонить объясните как созранять значение переменных в файл.
начался трэшак... открывайте учебник и читайте пор работу с файлами, потоками ввода вывода. если каждый ленивый горепрограммер будет задавать одни и теже вопросы, разжованные идеально в любых буках - тема утонет в гуане.
POS_troi
28.08.2009, 17:03
2ImNaruto
Используй поиск - как по форуму так и по гуглу/яндексу
как на мой взгляд то лучше использовать ini файл
http://devoid.com.ua/c-builder/cpp-builder-for-beginners/load-and-save-properties-in-ini-files.html
2Ra$cal
ну что же поделать =)
по этой теме уже можно написать буку
-m0rgan-
28.08.2009, 17:44
привет, подскажите пожаляйста ф-ю для определения времени выполнения цикла(while)
зарание спасибо!
-m0rgan-
28.08.2009, 17:50
И что?
она должна определять время выполнения цикла на каждой тачке.
GetTickCount перед входом в цикл и после выхода
или мой самописный класс, который считает с точностью до наносекунд (http://www.everfall.com/paste/id.php?ovzqr4iqnxs1)
Всем здрасти) Подскажите пожалуйста, какой функцией делать очистку консоли в Эклипсе под линуксом? System ("cls") в Эклипсе не дает ни каких результатов. В заранее благодарю.
Есть ли книги на русском языке по MFC ?
И что можно почитать про переход к программированию графического интерфейса пользователя
Мешков и Тихомиров "Visual C++ и MFC"
Программирование на VISUAL C++ 6.0
А что лучше изучать MFC или Qt ?
в мфц учить особо нечего. список классов и все. в кутэ все веселее и продуманнее. так что имхо нет особой проблемы ознакомиться с мфц и заняться кутэ.
Shaitan-Devil
30.08.2009, 08:44
А что лучше изучать MFC или Qt ?
Имхо лучше изучать QT, ибо MFC уже умирает, а QT довольно развивющаяся технология, к тому же кроссплатформенная.
POS_troi
31.08.2009, 19:49
Мужики, помогите однако, башка что-то уже не варит.
Winsock + HTTP GET
Получаю ответ от сервера
while(recv(soc,RecvBuff,sizeof(RecvBuff),0)) //while((i = recv(soc,RecvBuff,sizeof(RecvBuff),0))!=0)
{
//Обрезаем заголовок
for(int i = 0; RecvBuff[i]!=0; ++i)
{
if((RecvBuff[i]=='\r')&&(RecvBuff[i+1]=='\n')&&(RecvBuff[i+2]=='\r')&&(RecvBuff[i+3]=='\n'))
{
temp = (char*)&RecvBuff[i]+4;
break;
}
}
}
Данный код просто отлично отрезает заголовок ответа сервера но вот хотел бы узнать как будет лучше сделать обратное действие - вырезать контент но оставить заголовок.
пример если можно.
человек явно не слышал про функцию strstr ...
тут нет особо хитрых алгоритмов. ищутся границы - начало и конец. выделяется память, туда складываются нужные фрагменты. ну еще можешь регэкспы прикрутить. но для начала стоит ознакомиться со стандартной библиотекой
POS_troi
31.08.2009, 20:04
человек явно не слышал про функцию strstr
Знаю.. я спросил не как это сделать а как лучше это сделать.
что в твоем понимании лучше? в моем - поддержка кода, легкость понимания кода. поэтому лучше юзать strstr, ибо вместо твоих 7 строк имеем одну, название которой красноречиво говорит о назначении этой строки.
ps: а еще лучше выделить этот код в отдельную функцию и назвать ее getContent или cutHeader
А вообще в сетевых программах лучше пользоваться сишными функциями и строками или stl? Для меня это вопрос, ведь всякие strstr это остатки от си, и непонятно когда что лучше использовать?
ну сокету все равно придется передавать просто массив байтов. просто нужно сделать классы враперы над сокетами, которые скрывают работу с чистыми указателями
http://www.codeproject.com/KB/IP/client_server_socket.aspx
вот например. во всем остальном коде использовать классы. если передаются двоичные данные - значит делать классы, которые преобразуют бинарные данные в классы. вообще без острой неоюходимочти внутри ядра программы, если пишешь на с++, использовать чистые массивы и указатели нада ну ооочень редко. разве что для передачи в некоторые апи. больше причин для использования не вижу.
А вообще в сетевых программах лучше пользоваться сишными функциями и строками или stl? Для меня это вопрос, ведь всякие strstr это остатки от си, и непонятно когда что лучше использовать?
STL )
Hiro Protagonist
02.09.2009, 01:39
"... остатки от си"
убило. Это не остатки, это RTL! >____<
Надеюсь не пошлют лесом=) Скиньте плз код проекта, в котором вводится числа, потом он присвается к константам, потом с ними выполняется любое математическое действие.=)
Надеюсь не пошлют лесом=) Скиньте плз код проекта, в котором вводится числа, потом он присвается к константам, потом с ними выполняется любое математическое действие.=)
константы и есть на то константы, что их значение нельзя изменять....
константы и есть на то константы, что их значение нельзя изменять....
Изменить нельзя, но начальное значение дать же можно.
Скиньте плз код проекта, в котором вводится числа, потом он присвается к константам, потом с ними выполняется любое математическое действие
переведи на русский, пожалуйста
переведи на русский, пожалуйста
Нужен проект, который при запуске сначала попросит ввести например 2 числа, потом оно будет с этими числами делать любое математическое действие
в раздел помощи студентам иди за "сделайте мне тото". тут обсуждаются конкретные вопросы реализации чего-либо.
ICQ Hool
03.09.2009, 00:36
использую Visual C, проект mfc,
есть Tree Control
я использую для создания дерева такой код:
HTREEITEM room_1=m_tree.InsertItem("room_1",korp1);
m_tree.InsertItem("counter:",room_1);
подскажите пожалуйста как сделать чтобы после counter: стояла переменная(value) которая вычисляется в самой программе, например значение i из структуры ms т.е ms.i
с меня плюсы!
CString item_text;
item_text.Format("counter: %d", ms.i);
m_tree.InsertItem(item_text,room_1);
так или я чего то не понял? написал бы значения переменных и как должен выглядеть добавленный в дерево текст. меньше слов и понятно с первого взгляда.
ICQ Hool
03.09.2009, 08:24
Ra$cal, получилось, супер, но фишка в том, что у меня очень много таких как counter: у которых должны быть значения
это я к тому что слишком много ручками делать =)
Подскажите как вывести в цикле содержимое контейнера list.В том порядке в котором оно заносилось в него.
http://www.cplusplus.com/reference/stl/list/begin/
смена mac адреса, что читать?с++ builder
читай програмирование микрокантроллеров.
Потому как мак адрес - это физический адрес твоего компа.
Вернее не компа а устройства связи. И он вшит в память этого устройства. И сменить его довольно проблематично.
смена mac адреса, что читать?с++ builder
http://www.codeproject.com/KB/applications/MacIdChanger.aspx
смена mac адреса, что читать?с++ builder
http://devices.natetrue.com/macshift/macshift.zip
Сорец С++ и ехе.
ICQ Hool
04.09.2009, 16:49
Ra$cal, получилось, супер, но фишка в том, что у меня очень много таких как counter: у которых должны быть значения
это я к тому что слишком много ручками делать =)
с этим справился, всё действительно надо делать ручками
есть еще вопрос, делаю открывашку в вижале
CFileDialog fd(true);
if (fd.DoModal()==IDOK)
{
m_list.ResetContent();
m_list.AddString(fd.m_ofn.lpstrFile);
int fh = _open("1.dat",_O_RDWR | _O_BINARY);
...
как мне вместо 1.dat поставить тот файл который я выбираю в fd
а гуглить пробовал?
http://www.google.ru/search?q=CFileDialog+&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox
ICQ Hool
04.09.2009, 17:33
Ra$cal, извини
для тех кому это тоже может пригодиться
CString szlstfile = fd.GetPathName();
int fh = _open(szlstfile,_O_RDWR | _O_BINARY);
M@ZAX@KEP
04.09.2009, 19:25
Люди, есть little просьба... может ктонить кидануть ссылки на исходники сааавсем простеньких (м.б. даже бесполезных) прог для C++ Builder (Borland)? Желательно чтоб разные элементы были (поля ввода, кнопки, флажки, переключатели и т. п. х.) мне просто с целью поковыряца в образцах чтобы освоить этого зверя)) Заранее спс++ :D
ICQ Hool
просто не забывай открывать доки =) там очень много написано. гораздо быстрее поискать там чем сразу постить вопрос на форум и ждать ответа.
Korotnoe
05.09.2009, 22:58
Что это за ошибка
[Linker Error] Unresolved external '_Form1' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ
[Linker Error] Unresolved external 'TForm1::' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ
Пишу простую программу в билдере. и это показывается(
посмотри тут: __http://forum.shelek.ru/index.php/topic,4844.0.html , похожая тема
компилятор считает, что ты создал приложение с применением VCL, если создаш обычный проект. И естественно ишет объекты VCL, о чем тебе и сказал в описании ошибки.
-m0rgan-
06.09.2009, 21:02
Привет!
Подскажите плз, как сделать наклажной вывод цифер?
Например:
int a = 0;
while(a != 10)
{
a++;
cout<<a;
}
...
Необходимо чтоб выводило не 123456789, а сначало 1, затем 1исчезает и появляется 2, ну как в процентной загрузке.
Зарание благодарен!
/|\
+--------------------------------------
как сказал вот этот человек | юзай \r типа
printf("%i\n", ТВОЁЧИСЛО);
-m0rgan-
07.09.2009, 20:17
спс, разобрался, а вот еще вопрос:
есть цикл:
int a = 0;
while(a != 999999999)
{
a++;
cout<<a;
}
...
Всебы хорошо, но коут (cout<<a;) очень сильно замедляет процесс выполнения цикла :(
Как ы исбавится от этой проблемы?
не выводим в консоль\файл, или формируем блок и пишем вместо 100 раз по одному символу 100 символов за один раз.
ICQ Hool
07.09.2009, 22:55
помогите пожалуйста найти решение для организации масштабируемых графиков в visual c, проект mfc
нет ли какого-нибудь аддона чтобы в контролсах появилось что-нибудь на подобии tchart как в билдере?
умею рисовать по пикселям с помощью dc.SetPixel, dc.LineTo и dc.MoveTo, но это геморой...
погуглил, легче CGraph ничего нету?
помогите пожалуйста найти решение для организации масштабируемых графиков в visual c, проект mfc
нет ли какого-нибудь аддона чтобы в контролсах появилось что-нибудь на подобии tchart как в билдере?
умею рисовать по пикселям с помощью dc.SetPixel, dc.LineTo и dc.MoveTo, но это геморой...
погуглил, легче CGraph ничего нету?
разьве что откинуть mfc, который умер лет 10 назад и заюзать windows forms с zedgraph
помогите пожалуйста найти решение для организации масштабируемых графиков в visual c, проект mfc
нет ли какого-нибудь аддона чтобы в контролсах появилось что-нибудь на подобии tchart как в билдере?
умею рисовать по пикселям с помощью dc.SetPixel, dc.LineTo и dc.MoveTo, но это геморой...
погуглил, легче CGraph ничего нету?
Еслия правильно понял, может лучше для этого использовать, qt+qplot
M_script_
08.09.2009, 15:48
Всебы хорошо, но коут (cout<<a;) очень сильно замедляет процесс выполнения цикла :(
Как ы исбавится от этой проблемы?
Не выводи ничего. И вобще - непонятен смысл этого кода. Зачем он нужен, может по-другому лучше реализовать? (дополнено: не прочитал первое сообщение, про вывод цифр, только про cout<<a, исправил)
for(int a = 0; a < 999999999; a++)
{
if(!(a%100)) // выводить каждые 100 цифр
{
system("cls"); // очистка консоли под виндой
cout<<a;
}
}
ICQ Hool
08.09.2009, 19:40
scrat, n4e/\@ спасибо за ответы, остановился на CGraph...
я опять в затруднении
есть дерево ctreectrl
сounter.Format("counter: %d", ms.i);
HTREEITEM room_1=m_tree.InsertItem("room_1",korp1);
m_tree.InsertItem(counter,room_1);
....
как мне при выделении или нажатии на элемент(counter) дерева вытащить значение значение ms.i ?
ну или при нажатии на чекбокс, наверно это сложнее потому что нужен только один элемент дерева...
текст получил m_tree.GetItemText(m_tree.GetSelectedItem());
а как получить ms.i ?
Снова я по этой теме... Скиньте часть кода работы через socks5 (winsock). Сейчас доступа к дом. компу не имею, выложить наработки не могу. Но программа давала не тот рузультат уже на начальном приветствии клиента(char auth[10] = "\0x05\0x01\0x00).
http://msdn.microsoft.com/en-us/library/bb759988%28VS.85%29.aspx
часть Notifications
Помогите пожалуйста с вопросом.
Имеется кусок кода, через который я соединяюсь с web страницей, отправляю ей запрос и получаю в ответ ее исходник. Интересует следующая строка в запросе (header):
Accept-Encoding: gzip,deflate
Если ее не добавлять то идет чистый текст, но запакованый он весит в 5-20 раз меньше
Как ее можно распаковать?
ICQ Hool
09.09.2009, 07:37
ничего не получается =(
Как ее можно распаковать?
Можно использовать библиотеку zlib, вот пару ссылок:
http://www.realcoding.net/article/view/4177 (рус)
http://www.codeproject.com/KB/cpp/cgzip.aspx (eng)
http://cboard.cprogramming.com/cplusplus-programming/119170-gzip-cplusplus-function-crashes-my-program.html (eng)
Как из одного вектора запихать аллокатор в другой вектор?
Начал изучать Qt4 в первом же примере, по книге "Qt 4 программирование GUI на C++", вылезли такие ошибки при компиляции.
new.cpp:1:28: error: QApplication.hpp: No such file or directory
new.cpp:2:22: error: Qlabel.hpp: No such file or directory
new.cpp: In function ‘int main(int, char**)’:
new.cpp:5: ошибка: нет декларации ‘QApplication’ в этой области видимости
new.cpp:5: ошибка: expected `;' before ‘app’
new.cpp:6: ошибка: нет декларации ‘QLabel’ в этой области видимости
new.cpp:6: ошибка: нет декларации ‘label’ в этой области видимости
new.cpp:6: ошибка: expected type-specifier before ‘QLabel’
new.cpp:6: ошибка: expected `;' before ‘QLabel’
new.cpp:8: ошибка: нет декларации ‘app’ в этой области видимости
new.cpp: At global scope:
new.cpp:3: предупреждение: параметр ‘argc’ не используется
new.cpp:3: предупреждение: параметр ‘argv’ не используется
make: *** [new.o] Ошибка 1
Вот код:
#include <QApplication>
#include <Qlabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
BrainDeaD
09.09.2009, 21:25
или не хватает библиотек, или компайлер их не видит. с qt у тебя будет ещё очень много проблем и вопросов. советую тебе обосноваться на каком нибудь кодерском форуме, где обсуждается qt. на пример prog.org.ru. ачат, думаю, не совсем подходящее место для вопросов по qt.
2St0nX Там во первых ошибка в заголовке, QLabel, L надо с большой буквы писать.
Но ошибка в путях. Возможно надо указывать более полный путь до библиотеки например <QtGui/QApplication> если не поможет то можно попробовать писать так: qapplication.h
2St0nX Там во первых ошибка в заголовке, QLabel, L надо с большой буквы писать.
Но ошибка в путях. Возможно надо указывать более полный путь до библиотеки например <QtGui/QApplication> если не поможет то можно попробовать писать так: qapplication.h
Ничего не помогло :(
qt4.5.0 под убунту может чего там настроить надо? Ставил из репозитория.
Столкнулся с такой дурацкой проблемой раньше писал на пхп такого вопроса не возникало, а на С++ возник, суть в следующем.
есть функция someFunction()
она читает из потока данные
как записать весь поток в переменную и эту переменную вернуть как значение.
Разумеется поток произвольного значения.
ЗЫ
Не пинайте сильно если объяснил коряво.
Столкнулся с такой дурацкой проблемой раньше писал на пхп такого вопроса не возникало, а на С++ возник, суть в следующем.
есть функция someFunction()
она читает из потока данные
как записать весь поток в переменную и эту переменную вернуть как значение.
Разумеется поток произвольного значения.
ЗЫ
Не пинайте сильно если объяснил коряво.
Скинь код. Так непонятно чё то что ты хочеш и что ты понимаеш под потоком...
stat=1;
char get[1024]="";
while(stat) {
ret=recv(sClient, get, 1024, 0);//Получаем данные
cout << get;
if(ret==0) stat=0;
if(ret==SOCKET_ERROR) {
cout << "Socket error" << endl;
return 0;
}
}
Вот это фрагмент кода, использую винсокет тут, мне нужно чтоб в переменной get был весь ответ сервера, а не его часть, потом вернуть это значение. Возможно ли это сделать :?
std::string a;
while(recv(sClient, get, 1024, 0)!=NULL)
a+=get;
.....
return a;
Да получай ответ в цикле пока recv не возвратит 0 сам ответ прибавляеш к get и все. Потом переменную возвращаеш как ты тут 0 возвратил
Ничего не помогло :(
qt4.5.0 под убунту может чего там настроить надо? Ставил из репозитория.
Только что проверил, на виртуальной убунте, там такие же ошибки были, решилось установкой libqt4, там они разные я поставил все.
В продолжении, а как вывести в консольном приложении объект string
cout<< и printf не получается. Может есть стандартные функции?
Сразу чтоб не постить много.
С помощью какой функции можно найти подстроку в объекте string :?
Заранее спасибо.
string str;
cout<< str.c_str();
Hiro Protagonist
09.09.2009, 23:33
2Gin
//Резервируем и выделяем побайтно память
buffer = (char *)VirtualAlloc(NULL, 1000, MEM_RESERVE, PAGE_READWRITE);
buffer = (char *)VirtualAlloc(buffer, 1, MEM_COMMIT, PAGE_READWRITE);
//Читаем из сокета побайтно, чтобы быть уверенными, что вся инфа дошла
while(recv(sRemoteSock, &buffer[i], 1, 0))
{
//Если встретили перевод строки, то ппц конец передачи
if(buffer[i] == '\n')
{
buffer[i] = '\0';
printf("[>] Client say : %s\n", buffer);
VirtualFree(buffer, 0 , MEM_RELEASE);
i = 0;
break;
}
else
{
//Выделяем ещё один байт
buffer = (char *)VirtualAlloc(buffer + i++ + 1, 1, MEM_COMMIT, PAGE_READWRITE);
}
}
Как то так ) Тут концом сообщения считается перевод строки (можно переделать). Можно в принципе поблочно считывать, а не побайтно.
какой нах VirtualAlloc O_o на худой конец malloc, или new для c++.
Че то как то сложно, ведь в string'e есть метод find. И к тому же есть функция strtok, которая разбивает строку на лексемы(при первом вызове задается по какому символу разделяем, в последующих вызовах передаем NULL)
И кстати у меня std::cout << переменная_стринг выводится без проблем, т.е. не надо преобразовывать в char по средствам c_str().
Но я всегда подключал <string>
*uNkN0Wn*
09.09.2009, 23:55
Скажите пожалуйста как найти серийник к Codegear 2007 никак не найду.
Hiro Protagonist
09.09.2009, 23:58
2Ra$cal
а есть какойнибудь цинус использовать вместо API CRT-функции? Мне так например проще ) хотя да при работе с ANSI строками я буду использовать CRT, да и то не всегда. Так что мне не совсем понятно ваше негодование по этому поводу )
ЗЫ
Да и давайте не будем тут о кросплатформенности ^_____^
Огромное спасибо, ваша помощь просто не оценима !
(не сочтите за флуд)
Hiro Protagonist
ну давай еще в питоне будем VirtualAlloc юзать. Самый простой пример - выделяя память через апи ты получишь выравнивание страницы до 4096 байт, таким образом в случае аллока мелких блоков ты просто засрешь оперативу. Это раз. Во вторых - утечки памяти таким образом не отследить - это два. Заменить вызов VirtualAlloc на HeapAlloc было бы гораздо логичнее и правильнее, но это так же приведет к гемору - контроль размера кучи, невозможность отслеживания утечек памяти.
Если тебе эти проблемы до сих пор не известны - то сочувствую. Они есть, просто ты о них не знал =)
И еще - никогда не смешивают разные стили и технологии. Если юзают qt - юзают его классы. Если boost - то его. Например filesystem и классы работы с файлами qt не перемешивают в адеквате. Это банально упрощает читабельность кода.
Hiro Protagonist
10.09.2009, 01:24
2Ra$cal
Мы говорим о Питоне? Код на Си (прошу заметить именно на Си), значит мы и говорим про Си.
Самый простой пример - выделяя память через апи ты получишь выравнивание страницы до 1024 байт
О да, о да. Как будто используя другие функции мы этого не получим. Память всегда выделяется по странично. Библиотечные функции работают лишь по выделенному региону(ам) на куче, эмулируя выделение памяти. А кучи (Heap* функции) надо сказать довольно глючный инструмент ), который не рчень то и рекомендуется использовать. В конечном итоге все использует VirtualAlloc )
И да ты прав, у меня не такие большие проекты, чтобы использовать автоматизированный контроль утечек памяти - достаточно внимательности ) . Ну так и инструменты выбирают под задачу, а не наоборот.
Хотя надо признать в вышеприведенном куске смысла коммитить каждый байт нету ^______^ да, говнокод ) но пытаюсь исправится ).
Код на Си (прошу заметить именно на Си), значит мы и говорим про Си.
Именно поэтому я и рекомендую использовать Си-стайл. А именно malloc и free. Правда логично? =)
О да, о да. Как будто используя другие функции мы этого не получим. Память всегда выделяется по странично. Библиотечные функции работают лишь по выделенному региону(ам) на куче, эмулируя выделение памяти.
Так вот именно поэтому они и работают так, эмулируя кучу - чтобы использовать память эффективно. В твоем же случае гарантированно память будет неиспользована. В случае с crt - память будет исплоьзована. Еще одна засада - дефолтная куча создается при создании процесса =) Так что ты ее просто динамишь, соотв так же просираешь =)
А кучи (Heap* функции) надо сказать довольно глючный инструмент ), который не рчень то и рекомендуется использовать. В конечном итоге все использует VirtualAlloc )
Именно поэтому и следует не писать велосипед на костылях, а юзать malloc =)
Ну так и инструменты выбирают под задачу, а не наоборот.
И? Не вижу тут оправдания неумелого использования языка =)
POS_troi
10.09.2009, 12:06
sudo passwd root
Пробывал?
только не пойму - С++ тут каким боком =))
Хочу написать чекер, но на странице много яваскриптов, возник вопрос для корректной работы с яваскриптами достаточно отправлять корректные HTTP заголовки или нужны еще какие либо надстройки для правильной работы.
Извините за сумбурное изложение, но надеюсь меня поймете.
Если не тяжело покажите в какую сторону копать, по части программирование на С++ для сети (в частности для веба).
Спасибо.
смотри, не отправляет ли заголовков сам яваскрипт
+ он может изменять на лету скрытые поля - это надо отслеживать, иначе сервер данные формы не примет
в остальном яваскрипт роли не играет, насколько мне известно
2Диск and 2All
Если я отслежу последовательность своих действий HTTPAnalyzer'ом к примеру ну и просто сохраню все отсланные моим браузером заголовки (разумеется поменяю то что нужно мне) так оно будет работать или все же тут есть свои ньансы?
Возник еще вопрос
Вообщем нужно создать много файлов определенного содержания вида
file1.txt
file2.txt
проблема в том что не могу привести тип int to string
std::string name;
int i;
name.append("file");
name.append((char)i);
name.append(".txt");
Отказывается работать вообще, как только не пытался уже подскажите плз что делать.
Пробовал всеравно ругается
и как же ты пробовал? O_o
string str = "";
char tmp [20];
itoa(10, tmp, 10);
str.append(string(tmp));
cout << str.c_str();
нет так не пробовал, решил проблему через sprintf
int i;
char*ch;
sprintf(ch, "%d", i);
name+=ch;
char*ch;
ты пишешь в несуществующую память. это есть баг. или делай статик массив или аллок через нью.
2Ra$cal
окей пасиб щас переделаю.
ЗЫ
Не могу тебе '+' поставить за помощь т.к. тебе последнему ставил
Возник еще вопрос
Вообщем нужно создать много файлов определенного содержания вида
file1.txt
file2.txt
проблема в том что не могу привести тип int to string
юзай stringstreams )
Возник еще вопрос
Вообщем нужно создать много файлов определенного содержания вида
file1.txt
file2.txt
проблема в том что не могу привести тип int to string
Вот нашёл у себя в проектах
int func(int)
{
int port=42; //число которое будем преобразовывать
char buff[32];//буфер, если число большое то делай побольше, хотя и так уже 32 знака
char* ch; // то к чему приводим
ch = _itoa(port,buff,10); // супер фукц, которая все за нас делает,
//параметры:
//1) число для преобразования
//буфер для хранения
//радикс, ставь его = 10
//фкц возвращает тип char* потому просто присваиваем его ch
return 0;
}
Помогите найти ошибку в ф-ции:
function check_socks5(host: string; port: u_short; timeout: integer): BOOL;
var
s: TSocket;
addr: sockaddr_in;
buf: array[1..64] of char;
tv: TTimeVal;
data: string;
begin
result:=false;
s:= Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
If s = INVALID_SOCKET then exit;
tv.tv_sec:=timeout;
tv.tv_usec:=0;
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, @tv, sizeof(TTimeVal));
FillChar(addr, sizeOf(sockaddr_in), 0);
Addr.sin_family:=af_INET;
Addr.sin_port:=hTons(port);
Addr.sin_addr.S_addr:=Inet_ADDR(pchar(host));
if Connect(s, addr, SizeOf(TSockAddr)) = SOCKET_ERROR then exit;
data:=#5#1#0;
if send(s, data[1], length(data),0) = SOCKET_ERROR then exit;
if recv(s, buf, 2, 0) = SOCKET_ERROR then exit;
if buf[1] <> #5 then exit;
if buf[2] <> #0 then exit;
data:=#5#1#0#3+chr(length(host))+host+chr(port div 256) + char(port mod 256);
if send(s, data[1], length(data), 0) = SOCKET_ERROR then exit;
if recv(s, buf, 2, 0) = SOCKET_ERROR then exit;
if buf[1] <> #5 then exit;
if buf[2] <> #0 then exit;
ShutDown(s, sd_Both);
CloseSocket(s);
result:=true;
end;
Функция должна возвращать true если прокся ок и false если прокся не ок.
[c/c++] Новичкам: задаем вопросы
ты топиком точно не ошибся?
Большой джо
12.09.2009, 14:58
вот начал программировать на c++, немного разобрался, но не понимаю как сделать GUI, если кому не в лом, скиньте линк на книжку с описанием!))
BrainDeaD
12.09.2009, 15:10
в основном, gui делается с помощью библиотек, типа qt.
сейчас актуальна qt 4, но книги для неё я видел только в продаже и на англ(edit: давно не искал. уже есть на русском.).
у меня имеется книга по qt 3 на русском. чтобы понять сам смысл вполне достаточно.
если хочешь, залью.
книг и на русском вполне достаточно. у меня на полке лежит -
http://www.books.ru/shop/books/527821
http://www.books.ru/shop/books/588549
Большой джо
12.09.2009, 17:40
у меня имеется книга по qt 3 на русском. чтобы понять сам смысл вполне достаточно.
если хочешь, залью.
Залей пожалуста!)
BrainDeaD
12.09.2009, 18:10
Залей пожалуста!)
no problem :)
http://slil.ru/27976419
Большой джо
12.09.2009, 18:17
Благодарю)) слушай, я скачал, qt3, пользуюсь прогой dev-cpp, или как то так, как библиотеку в неё вмазать?)
BrainDeaD
12.09.2009, 18:21
ты извини, я qt со времён qt 3 не занимался, не помню уже точно что по чём. тебе сюда (http://www.prog.org.ru/index.php?action=forum) , там тебе помогут.
Большой джо
12.09.2009, 18:23
ты извини, я qt со времён qt 3 не занимался, не помню уже точно что по чём. тебе сюда (http://www.prog.org.ru/index.php?action=forum) , там тебе помогут.
Ok!))
Hiro Protagonist
12.09.2009, 18:39
2Большой джо
Счас меня Ra$cal будет публично распинать опять, но вставлю свои пять копеек )). Имхо перед тем как использовать сторонии фреймворки для gui, необходимо сначала изучить средства предоставляемые winapi для создания оконных приложений. После этого можно уже будет самостоятельно оценить ту или иную гуи-библиотеку и выбирать уже самостоятельно. Поэтому имхо стоит почитать Петцольда или Финогенова к примеру. Разобраться как построена графическая подсистема, оконные сообщения, коллбэки и тд. После этого не составит труда разобраться в любой оконной библиотеке. Но это большое ИМХО. Ибо я дальше небольшого опыта юзания wxWidgets не ушел. Так что решать тебе.
По поводу присоединения библиотек к проекту. Должно быть указано как работать с ней в документации, но в большинстве случаев нужно будет просто подключить несколько заголовочных и lib файлов к проекту. Заголовки подключаются через
#include "xxxx.h" (xxxx.h - должны быть расположена по знакомым компилятору путям)
и подключить в свойствах проекта (в разделе линковки) необходимые либы.
Hiro Protagonist
12.09.2009, 18:53
2Большой джо
Счас меня Ra$cal будет публично распинать опять, но вставлю свои пять копеек )). Имхо перед тем как использовать сторонии фреймворки для gui, необходимо сначала изучить средства предоставляемые winapi для создания оконных приложений. После этого можно уже будет самостоятельно оценить ту или иную гуи-библиотеку и выбирать самостоятельно. Поэтому имхо стоит почитать Петцольда или Финогенова к примеру. Разобраться как построена графическая подсистема, оконные сообщения, коллбэки и тд. После этого не составит труда разобраться в любой оконной библиотеке. Но это большое ИМХО. Ибо я дальше небольшого опыта юзания wxWidgets не ушел. Так что решать тебе.
Петцольд Ч. Программирование для Windows 95
http://www.softtime.ru/cpp_info/petzold.php
Не смотри, что настолько старая, про графику там не устарело. И да это лучшее по GUI, что когда-нибудь было написано.
Можно ещё наших поискать - Финогенова, Щупака и тд, нолучше ту, что я дал.
По поводу присоединения библиотек к проекту. Должно быть указано как работать с ней в документации, но в большинстве случаев нужно будет просто подключить несколько заголовочных и lib файлов к проекту. Заголовки подключаются через
#include "xxxx.h" (xxxx.h - должны быть расположена по знакомым компилятору путям)
и подключить в свойствах проекта (в разделе линковки) необходимые либы.
Большой джо
12.09.2009, 18:58
2Большой джо
Счас меня Ra$cal будет публично распинать опять, но вставлю свои пять копеек )). Имхо перед тем как использовать сторонии фреймворки для gui, необходимо сначала изучить средства предоставляемые winapi для создания оконных приложений. После этого можно уже будет самостоятельно оценить ту или иную гуи-библиотеку и выбирать уже самостоятельно. Поэтому имхо стоит почитать Петцольда или Финогенова к примеру. Разобраться как построена графическая подсистема, оконные сообщения, коллбэки и тд. После этого не составит труда разобраться в любой оконной библиотеке. Но это большое ИМХО. Ибо я дальше небольшого опыта юзания wxWidgets не ушел. Так что решать тебе.
По поводу присоединения библиотек к проекту. Должно быть указано как работать с ней в документации, но в большинстве случаев нужно будет просто подключить несколько заголовочных и lib файлов к проекту. Заголовки подключаются через
#include "xxxx.h" (xxxx.h - должны быть расположена по знакомым компилятору путям)
и подключить в свойствах проекта (в разделе линковки) необходимые либы.
Спс, гляну!)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot