Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
[
9]
10
11
12
13
14
15
16
17
18
19
20
21
22
Как узнать версию(Major/Minor version) проги, которая устанавливается в:
Project->Options->Version Info
?
2criz
Правой кнопкой мыши на файле > Свойства > Версия ...
izlesa, мне программный способ нужен :)))
Как узнать версию(Major/Minor version) проги, которая устанавливается в:
?
используй функции из version.dll GetFileVersionInfoSize+GetFileVersionInfo+VerQuery Value
http://msdn.microsoft.com/en-us/library/ms647003.aspx
там и пример есть
Допустим есть переменная типа AnsiString,содержащяя массив символов.Как на С++(не на С!) подменить в этом массиве символы a на символы f ?
Есть проэкт в Visual Studia 6. Программа создаёт dll файл, при помощи которого в MATLAB передаются данные с С++. Проблема в том,что по здравому смыслу у меня величины x и m должны быть одинаковые. А программа выдаёт совершенно немыслимые числа для m. Помогите разобраться,пожалуйста.
#include <mex.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#define raz 20
//Prototype:
void MyEmptyMexFunction(int,int, double*, double*);
//--------------------------------------
void mexFunction(int nOut,
mxArray* pOut[] )
{
int mm=20,nn=1; double *pO; double *pO1;
if (nOut > 0)
{
pOut[0] = mxCreateDoubleMatrix(mm,nn,mxREAL);
pOut[1] = mxCreateDoubleMatrix(mm,nn,mxREAL);
pO = mxGetPr(pOut[0]);
pO1 = mxGetPr(pOut[1]);
MyEmptyMexFunction(mm,nn,pO,pO1);
}
}
//------------Our own auxilary function----------------
void H(double* x, double* aq)
{
int i;
for (i=0;i<raz;i++) aq[i]=x[i];
}
void MyEmptyMexFunction(int mm, int nn, double* pO, double* pO1)
{
double x1[raz];
int n;
int i;
double m[raz];
double x[raz];
x[0]=-10;
n=0;
H(x,x1);
do
{
x[n+1]=n;
m[n]=x1[n];
n++;
}
while(n<raz-1);
for (i=n;i<raz;i++)
{
m[i]=333;
x[i]=333;
}
memcpy(pO, m, i*sizeof(double));
memcpy(pO1, x, i*sizeof(double));
}
если массив символов, то тупо чекай каждые елемент массива. если равно 'a' меняй на 'f'.
если массив символов, то тупо чекай каждые елемент массива. если равно 'a' меняй на 'f'.
А как побайтно перебрать AnsiString ?
А как побайтно перебрать AnsiString ?
http://www.duke.edu/web/isis/gessler/borland/strings.htm
ToniKapuchon
11.12.2008, 21:55
char massiv[]={'a','a','a','a'};
for(int i=0;i<sizeof(massiv);i++)
{
massiv[i]='f';
cout<<massiv[i]<<endl;
}
что не верно в моём свитче?
switch(hod)
{
case "1x1": fields[0] = gamer1; break;
case "1x2": fields[1] = gamer1; break;
case "1x3": fields[2] = gamer1; break;
case "2x1": fields[3] = gamer1; break;
case "2x2": fields[4] = gamer1; break;
case "2x3": fields[5] = gamer1; break;
case "3x1": fields[6] = gamer1; break;
case "3x2": fields[7] = gamer1; break;
case "3x3": fields[8] = gamer1; break;
}
компилятор ругается
error C2051: case expression not constant
switch не поддерживает строки
Народ , не подскажете , есть у кого справочник по функциям С++ или VC++ ???
У меня чисто математический вопрос. Надо нарисовать круговую диаграмму (по типу экселя), скажем картошки продано 70%, а морковки 30%, рисую круг с этим проблем нет, надо нарисовать угол из центра окружности и до ее границы. Рисовать я так понял надо двумя прямыми. А формулу не помню. Буду благодарен если кто то подскажет. Компилятор TurboC или Borland C++
P.S. Manoff смотри msdn, on-line версия (http://msdn.microsoft.com/ru-ru/default.aspx) но я предпочитаю поиск из VS
Привет всем! Мне нужна ваша помощь , помогите сделать тест на Delphi+VCL , просто мне задали сделать тест программу , кодить я не умею , так как основа у меня в графики , прошу помощи! Только что скачал Delphi +VLC и жду ваших пояснений , если удобно , могу и C++ скачать , суть теста будет такова
Кто ты: Муж\Жен
Кем работаешь: Студент\Ученик
И начинается вынос мозга , кем бы хотел стать и тд , на этой основе скапливаются баллы , т.е. некий алгоритм , например набрал 3-4 бала тебе ответ : "Ты тупой"
Помогите мне сделать тест скроки очень коротки , нужна ваша помощь!
Так же если кому удобно , могу скачать Delphi 5 или C++ , главное только помощь ваша ребят!
char gamer1;
cin >> gamer1;
char *fields[9] = {" "," "," "," "," "," "," "," "," "};
char hod;
cin >> hod;
if(hod == "1x1") fields[0] = gamer1;
else if(hod == "1x2") fields[1] = gamer1;
else if(hod == "1x3") fields[2] = gamer1;
else if(hod == "2x1") fields[3] = gamer1;
else if(hod == "2x2") fields[4] = gamer1;
else if(hod == "2x3") fields[5] = gamer1;
else if(hod == "3x1") fields[6] = gamer1;
else if(hod == "3x2") fields[7] = gamer1;
else if(hod == "3x3") fields[8] = gamer1;
error C2446: '==' : no conversion from 'const char *' to 'int'
error C2040: '==' : 'int' differs in levels of indirection from 'const char [4]'
error C2440: '=' : cannot convert from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
:'( ????
Наверное как то так надо
if(hod == '1x1') *fields[0] = gamer1;
Что прога должна делать? Я не очень понимаю.
У тебя первые две ошибки связаны с кавычками.
n4e/\@ это часть проги ... но впринципе здесь человек вводит свою метку ... и свой ход так сказать... потом сравниваем введёный ход и присваеваем элементу массива метку игрока =) .... в чём же ошибка с ковычками?
то что ты показал '1x1' ... на скоко я знаю между ' ' вводится один символ ... и если вот так ввести в программе то это превратится в какуета херь =\\
п.с насчёт .. *fields[0] это было верно я просто не заметил =)
если строки типа char* то их обычно сравнивают strcmp
if(!strcmp("1x1",hod))
{
...
}
Вот так все работает.
char gamer1;
cin >> gamer1;
char *fields[9];
for (int i = 0; i <=8; i++)
fields[i] = new char;
char *hod;
hod = new char;
cin >> hod;
if(0 == strcmp(hod, "1x1")) *fields[0] = gamer1;
else if(0 == strcmp(hod,"1x2")) *fields[1] = gamer1;
else if(0 == strcmp(hod,"1x3")) *fields[2] = gamer1;
else if(0 == strcmp(hod,"2x1")) *fields[3] = gamer1;
else if(0 == strcmp(hod,"2x2")) *fields[4] = gamer1;
else if(0 == strcmp(hod,"2x3")) *fields[5] = gamer1;
else if(0 == strcmp(hod,"3x1")) *fields[6] = gamer1;
else if(0 == strcmp(hod,"3x2")) *fields[7] = gamer1;
else if(0 == strcmp(hod,"3x3")) *fields[8] = gamer1;
всем кто кодит в Visual Studio 2008
вот кориш кинул патч для продления 90-дневной триалки. сам долго искал нормальный так что думаю многим сохранит время на поиски.
http://img68.imageshack.us/img68/5198/antichatre5.jpg (http://img68.imageshack.us/my.php?image=antichatre5.jpg)
http://img68.imageshack.us/img68/antichatre5.jpg/1/w389.png (http://g.imageshack.us/img68/antichatre5.jpg/1/)
КАЧНУТЬ (http://ifolder.ru/9553494)
Лицензионный ключ можно получить бесплатно школьникам и студентам. dreamspark.ru
2 nerezus
я в курсах что так можно но вот только я уже пробовал не раз регится в мелкософта и постоянно получал в ответ страницу с еррором
We're unable to complete your request
Windows Live ID is experiencing some technical difficulties while creating your account. To start using Windows Live today, get support now, click here ,choose Windows Live ID and copy paste the code below into the form.
вот так вот...
У мення просто 3 года назад он зареган... потом 3 раза регал(когда фри домены раздавали) - все норм было )
Сейчас учу язык , ни разу не приходилось писать шифровальщики , подкиньте исходники плиз и различные алгоритмы шифрования , с заданием ключа. Заранее спасибо!
Здравствуйте! У меня следующий вопрос к тем, кто знает язык С:
Надо, чтобы пользователь вводил числа с клавиатуры и они проводилась проверка: число ли ввёл пользователь. А если это так, то выполнять какие-то расчёты, если нет, то сравнивать введённое значение с "END". Если это END, то выполнять какие-то действия, если нет - то выводить на экран сообщение.
Заранее спасибо!
Не могу понять по поводу strcmp:
# include <stdio.h>
# include <string.h>
int main() {
char *buffer;
int a;
printf("Enter a, please:");
scanf("%s", &buffer);
if (strcmp(buffer, "END")) {
printf("END_NO");
}
else {
printf("END_OK");
}
}
Должна выводить END_OK если введено END, и END_NO если иначе. Так эта прога вообще почти никак не работает. =( Почему он делает не так как надо?
ToniKapuchon
17.12.2008, 02:36
#include "stdafx.h"
# include <stdio.h>
# include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
char buffer[15];
int a;
printf("Enter a, please:");
scanf("%s", &buffer);
if (strcmp(buffer, "END")) {
printf("END_NO");
}
else {
printf("END_OK");
}
return 0;
}
вот
вот
а зачем нужны вот эти параметры у главной функции: int argc, _TCHAR* argv[] ??? и откуда они взялись?
Underwit
17.12.2008, 02:47
это дополнительные параметры которые можно передать при запуске программы через командную строку.
т.е.
cmd > program.exe vasya pupkin
argc - это счетчик
argv[] - массив с переданными параметрами
argv[0] - содержит полный путь и имя программы
argv[1] = vasya
argv[2] = pupkin
это дополнительные параметры которые можно передать при запуске программы через командную строку.
т.е.
cmd > program.exe vasya pupkin
argc - это счетчик
argv[] - массив с переданными параметрами
argv[0] - содержит полный путь и имя программы
argv[1] = vasya
argv[2] = pupkin
Разобрался, всё понятно! =)
Спасибо большое!
xismyname
17.12.2008, 17:40
Не могу понять по поводу strcmp:
# include <stdio.h>
# include <string.h>
int main() {
char *buffer;
int a;
printf("Enter a, please:");
scanf("%s", &buffer);
if (strcmp(buffer, "END")) {
printf("END_NO");
}
else {
printf("END_OK");
}
}
Должна выводить END_OK если введено END, и END_NO если иначе. Так эта прога вообще почти никак не работает. =( Почему он делает не так как надо?
1.Tы создал указатель но не занял место в памяти куда будет указывать данный указатель.
2.Ошибка в scanf(),когда передаешь указатель buffer тебе незачем вставлять знак &,так как buffer указатель.
И если даже этот buffer будет статистическое поле (например buffer[16]) то все ровно знак *& не указываеться.
Если хочеш чтобы этот код работал корректно напиши так :
# include <stdio.h>
# include <string.h>
int main() {
char *buffer;
int a;
/* Mem. allocate */
buffer = (char*)malloc(sizeof(char) * 16);
printf("Enter a, please:");
scanf("%s", buffer);
if (strcmp(buffer, "END")) {
printf("END_NO");
}
else {
printf("END_OK");
}
}
У меня очередной вопрос по С:
Возможно ли в С разбить натуральное число по цифрам так, чтобы каждая цифра числа оказалась бы отдельным элементом массива?
Delimiter
18.12.2008, 20:45
2 Vip
char a[200];
itoa(number,a,10); // в деястичной itoa(number,a,16) шестнадцатиричной и по аналогии
Пишу простую программу, отправить запрос на сервер, принять ответ с сервера.
Для сокетов использую Эту (http://forum.antichat.ru/threadnav27529-1-10.html) библиотеку.
Все это делаю в блоке инилизации программы.
Создаю сокет, отсылаю запрос, все нормально.
дальше следующий код
char buf[1024];
char otvet[9999];
mysocket.set_buffer_size(sizeof(buf));
while (strstr(buf,"</html>")==0)
{
mysocket >> buf;
strcat(otvet,buf);
}
mysocket.close();
компилируется, все хорошо, данные получаю правильные.
Но как только доходит до конца. (return TRUE;) прога вылетает с ошибкой обратся в микрософт
пишу:
mysocket.close();
delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ
и о чудо прога компилируется и работает, не каких ошибок
причем ей пофигу будули я удалять ответ или delete []buf;
она будет нормально работать.
Вот как можно объяснить такую сетуацию?
Проверял на WM6 в эмуляторе и на WM6.1 на своей коммуникаторе.
De-visible Про тему знаю, не думал что вопрос про ВМ можно отнести к разряду для новичков.
РЕШЕНИЕ: Увеличил buf и все стало нормально. Почему все работал когда писал delete [] загадка.
De-visible
19.12.2008, 00:50
Для таких вопросов есть эта тема, не стоит создавать отдельную
Установил visual C++ откомпилировал, прога пашет. Закидываю на другой комп выходит сообщение, то что не находит компоненты. Советовали отключить манифест, отключил, но все-равно не пашет
groundhog
19.12.2008, 22:32
И что она не находит? На чём компилировал?
Все Visual c++ 2008 компилировал. На другом компе запускаю пишет, не найдены компонеты и все.
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf
доброго времени суток.
очень нужно реализовать функцию открытия txt файлов и вывода содержимого файлов на экран в отдельном окне.
вот что набросал уже:
класс окна для вывода в него содержимого файла:
class COpenWnd:public CFrameWnd
{
public:
COpenWnd(CWnd *wnd);
};
COpenWnd::COpenWnd(CWnd *wndPerent)
{
CRect rectWnd(25,25,700,500);
Create(NULL, "Opened file", WS_OVERLAPPEDWINDOW | WS_HSCROLL |WS_VSCROLL , rectWnd, wndPerent, NULL);
}
и функция, которая открывает файл и выводит его содержимое в окно:
void CMyFrameWin::OnOpen()
{
CString m_Text, path;
CFileDialog dlgOpen(TRUE, "txt","",
OFN_HIDEREADONLY, "BLOKNOT (*.txt)| *.txt| VISUAL C++ (*.cpp)| *.cpp| ALL Files(*.*)|*.*|", this);
if(dlgOpen.DoModal()==IDOK)
{
CStdioFile File(dlgOpen.GetPathName(), CFile::modeRead| CFile::typeBinary);
CString & ref=m_Text;
path=dlgOpen.GetPathName();
COpenWnd *OpenWnd=new COpenWnd(this);
OpenWnd -> ShowWindow(SW_SHOWNORMAL);
OpenWnd -> UpdateWindow();
CClientDC dc(OpenWnd);
int y=30;
CFont l_font;
l_font.CreatePointFont(150,"Lucida Console");
CFont* l_old_font = dc.SelectObject(&l_font);
dc.TextOut(10,10,path);
dc.SelectObject(l_old_font);
while (File.ReadString(ref)!=NULL)
{
CFont l_font;
l_font.CreatePointFont(150,"Lucida Console");
CFont* l_old_font = dc.SelectObject(&l_font);
dc.SetTextColor(RGB(y*10,y+19,y+50));
dc.TextOut(30,y,m_Text, strlen(m_Text)-1);
y=y+45;
dc.SelectObject(l_old_font);
}
}
}
проблема: никак не получается сделать рабочие полосы прокрутки, чтоб когда в файле большой текст, то можно было с помощью полос прокручивать и видеть все содержимое файла.
помогите пожалуйста новичку.
большое спасибо! ;)
А зачем ты текст через dc отрисовываешь? Ты же используешь стандартные компоненты, поэтому используй Editbox или его производные, какой средой пользуешься?
А зачем ты текст через dc отрисовываешь? Ты же используешь стандартные компоненты, поэтому используй Editbox или его производные, какой средой пользуешься?
спасибо за совет. в общем принял во внимание и вот к чему дошел:
http://www.gfs-team.ru/?act=articles&pact=122
только вот у меня это отдельное диалоговое окно в приложении, которое открывается по нажатии ОПЕН.
1) создал класс class COpenDialog : public CDialog
class COpenDialog : public CDialog
{
public:
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
COpenDialog(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOG_OPEN};
CEdit m_EditOpen;
CEdit m_bOpen;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnStnClickedBitmap1();
};
COpenDialog::COpenDialog(CWnd* pParent)
: CDialog(COpenDialog::IDD, pParent)
{
}
void COpenDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_OPEN_PATH, m_EditOpen);
DDX_Control(pDX, IDC_OPEN_TEXT, m_bOpen);
}
BEGIN_MESSAGE_MAP(COpenDialog, CDialog)
ON_WM_PAINT()
ON_WM_SETCURSOR()
ON_STN_CLICKED(IDB_BITMAP1, &COpenDialog::OnStnClickedBitmap1)
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////
BOOL COpenDialog:: OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
----bla bla bla
}
/////////////////////////////////////////////////////////////////////////////
void COpenDialog::OnPaint()
{
----bla bla bla
}
void COpenDialog::OnOK()
{
CString m_EditText;
// TODO: Add your control notification handler code here
CString fname; //Переменная для хранения имени файла
CFile file; //обьект класса CFile
char ch[1024]; //Буффер для чтения данных из файла
if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
{
CFileDialog fDialog(TRUE);
fDialog.DoModal();
m_EditOpen.SetWindowText(fDialog.GetPathName());
m_bOpen.SetWindowText("Read");
OpenRead = true;
}
else
{
m_EditOpen.GetWindowText(fname); //Получаем имя файла
if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
{
AfxMessageBox("Cannot open file");
return;
}
file.Read(&ch, 1024); //Читаем 1024 байт
//m_EditText.SetWindowText(ch);
file.Close(); //Закрываем файл
m_bOpen.SetWindowText("Open");//Меняем текст кнопки
OpenRead = false;
}
CDialog::OnOK();
}
void COpenDialog::OnCancel()
{
CDialog::OnCancel();
}
BOOL COpenDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_EditOpen.SetWindowText(CString("файл"));
m_bOpen.SetWindowText(CString("содержимое"));
UpdateData(false);
OpenRead = false;
return TRUE;
}
и подправил функцию ОПЕН с мейнфрейма, чтоб она вызывала диалог:
void CMyFrameWin::OnOpen()
{
COpenDialog dialog;
if(dialog.DoModal()==IDOK);
}
при компиле имеем ошибку в строчке
m_EditText.SetWindowText(ch);
которую устранил пока лиш тем что закомментировал... :(
суть ошибки :
'SetWindowTextA' : is not a member of 'ATL::CStringT<BaseType,StringTraits>'
в чем собственно трабла у как устранить данную проблему? :confused:
среда разработки - Visual Studio 2008
Спасибо всем кто откликнется.
--------------------EDIT---------------------
Спасибо за консультацию по аське groupby
проблема была в:
"m_EditText иметт тип CString
а должен иметь тип CEdit"
--------------------EDIT---------------------
Всем привет. Проблемка тут возникла. Имеется следующий код:
if(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 4) == INVALID_HANDLE_VALUE)
{
ShowMessage(IntToStr(GetLastError()));
}
Получаю ошибку 8: Недостаточно памяти для обработки команды.
Как решить эту проблему? С другими процессами все норм, а вот с этим нет
groundhog
21.12.2008, 22:12
== ==
В исходнике так же?
groundhog
21.12.2008, 22:19
А почему th32ProcessID равен 4 при вызове?
А почему th32ProcessID равен 4 при вызове?
мне нужен процесс по имени System :)
Есть элемент CWebBrowser2, как в него можно задать куки из программы. т.е есть страница куда без кукисов или логина и пароля не попадешь, куки я как раз знаю. Я так понимаю мне их надо просто прописать в ие, но как?
groundhog
21.12.2008, 22:28
criz, ты хочешь получить список всех процессов в системе что ли?
criz, ты хочешь получить список всех процессов в системе что ли?
Нет, мне надо получить список модулей/библиотек процесса System.
groundhog
22.12.2008, 11:49
criz, больше чем уверен, что ты намутил что-то с обработкой ошибок. Скорее всего тебе возвращается отказ в доступе, а не ошибка по памяти. Попробуй скомпилять этот кусок кода:
#include <windows.h>
#include <tlhelp32.h>
int main (int argc, char* argv[]) {
HANDLE hSnapshot;
LPVOID lpMsgBuf;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 4);
if (hSnapshot == INVALID_HANDLE_VALUE) {
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0,
(LPTSTR)&lpMsgBuf,
0,
NULL
);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
}
return 0;
}
groundhog, я тоже подумывал насчет нехватки прав... Вот код, который, как мне показалось, "дает" права:
void chPriv(int res)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES priv;
priv.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &priv.Privileges[0].Luid);
if(res)
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
priv.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, 0, &priv, sizeof(priv), NULL, NULL);
CloseHandle(hToken);
}
}
Есть ли здесь ошибка?
Если не использовать эту функцию, то вылетает ошибка "не хватает прав", а если использовать - "не хватает памяти".
groundhog
22.12.2008, 13:10
Ну на первый взгляд - всё верно. Покажи весь исходник, трудно говорить о проблеме на словах. Чтобы понять в чём проблема нужно оттрассировать исходник, так что выложи где-нить, если не хочешь публично светить...
Вот, весь код:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#define dwPID 4
void chPriv(int res);
int main(int argc, char* argv[])
{
MODULEENTRY32 mod;
LPVOID lpMsgBuf;
HANDLE snap = INVALID_HANDLE_VALUE;
chPriv(1);
snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if(snap == INVALID_HANDLE_VALUE)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
return 1;
}
mod.dwSize = sizeof( MODULEENTRY32 );
if( !Module32First(snap, &mod) )
{
printf("Module32First: %d\n", GetLastError());
CloseHandle(snap);
return 1;
}
do
{
printf("%s\t", mod.szModule);
printf("0x%X\n", mod.modBaseAddr);
}
while( Module32Next(snap, &mod));
chPriv(0);
CloseHandle(snap);
getchar();
return 0;
}
void chPriv(int res)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES priv;
priv.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &priv.Privileges[0].Luid);
if(res)
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
priv.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, 0, &priv, sizeof(priv), NULL, NULL);
CloseHandle(hToken);
}
}
Ребята, помогите пожалуйста... голова уже забита..
есть функция, которая считывает данные с файла и передает их в эдитбокс.
по дефолту там считывает 1024 байта. не больше и не меньше.
как в MFC получить длину файла и считывать такое количество байт, которое нужно, а не строго только 1024..
вот код:
void COpenDialog::OnOpen()
{
CString fname; //Переменная для хранения имени файла
CFile file; //обьект класса CFile
char ch[1024]; //Буффер для чтения данных из файла
if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
{
CFileDialog fDialog(TRUE);
fDialog.DoModal();
m_EditOpen.SetWindowText(fDialog.GetPathName());
m_bOpen.SetWindowText("Read");
OpenRead = true;
}
else
{
m_EditOpen.GetWindowText(fname); //Получаем имя файла
if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
{
AfxMessageBox("Cannot open file");
return;
}
file.Read(&ch, 1024); //Читаем 1024 байт
m_EditText.SetWindowText(ch);
file.Close(); //Закрываем файл
m_bOpen.SetWindowText("Open");//Меняем текст кнопки
OpenRead = false;
}
}
никак не могу вкурить как сюда прилепить CFile::GetLength.. а завтра нужно сдать..
кто нить на свежую голову посмотрите что там можно сделать. спасибо, друзья.
под рукой нету компилятора, попробуй подставлять CFile вроде как-то так:
file.Read(&ch, CFile);
ногами не пинать, не уверен на 55 персентов.
(имеется ввиду то, что ты не можеш подставить)
не так не катит... вот что я пробовал, получить сразу длину в самой функции считывания.
file.Read(&ch, CFile::GetLength(fDialog.GetPathName()));
но тоже не катит.. хз.. пробую дальше.
кто что подскажет? спс.
а чем GetFileSize не устраивает? http://msdn.microsoft.com/en-us/library/aa364955(VS.85).aspx
void COpenDialog::OnOpen()
{
CString fname; //Переменная для хранения имени файла
CFile file; //обьект класса CFile
//char ch[1024]; //Буффер для чтения данных из файла
char ch; //Буффер для чтения данных из файла
CString ch1;
if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
{
CFileDialog fDialog(TRUE);
fDialog.DoModal();
m_EditOpen.SetWindowText(fDialog.GetPathName());
m_bOpen.SetWindowText("Read");
OpenRead = true;
}
else
{
m_EditOpen.GetWindowText(fname); //Получаем имя файла
if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
{
AfxMessageBox("Cannot open file");
return;
}
int dlina;
dlina=::GetFileSize(file,0);
file.Read(&ch1, dlina); //Читаем 1024 байт
m_EditText.SetWindowText(ch1);
file.Close(); //Закрываем файл
m_bOpen.SetWindowText("Open");//Меняем текст кнопки
OpenRead = false;
}
}
вот вроде так только при открытии еррор. хз.... не могу понять в чем трабла...
--------------------EDIT---------------------
вот если кому нить понадобится, рабочий код. Большое спасибо 2 groupby за помощь.
void COpenDialog::OnOpen()
{
CString fname; //Переменная для хранения имени файла
CFile file; //обьект класса CFile
if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
{
CFileDialog fDialog(TRUE);
fDialog.DoModal();
m_EditOpen.SetWindowText(fDialog.GetPathName());
m_bOpen.SetWindowText("Read");
OpenRead = true;
}
else
{
m_EditOpen.GetWindowText(fname); //Получаем имя файла
if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
{
AfxMessageBox("Cannot open file");
return;
}
int len = file.GetLength();
char* ch = new char[len];
file.Read(ch, len); //Читаем len байт
m_EditText.SetWindowText(ch);
file.Close(); //Закрываем файл
m_bOpen.SetWindowText("Open");//Меняем текст кнопки
penRead = false;
}
}
--------------------EDIT---------------------
sprintf(buffer1,"%lu",i); // заносим i в buffer1
sprintf(buffer2,"%lu",i*i); // заносим i*i в buffer2
if(strpos = strstr(buffer2, buffer1)) // узнаем место вхождения buffer1 в buffer2, присваевам strpos. Если он не 0, то идем дальше
if((strpos-buffer2) == strlen(buffer2) - strlen(buffer1)) // проверям равенство и если не 0, то идем дальше
вот :)
кто может помочь с программой постучите в асю, дело срочное!! для знающего делов на минуту-две, а мне разбираться некогда... о цене там же договоримся... срочно! (icq:295820085)
Ввести массив строк.Для каждой строки проверить,является ли она симметричной или нет.Вывести на экран саму строку и результата её обработки.
+++ прилогается :D
Ввести массив строк.Для каждой строки проверить,является ли она симметричной или нет.Вывести на экран саму строку и результата её обработки.
+++ прилогается :D
В нете есть куча примеров:
Забей в гугле "с++ палиндром" готовых исходников кучарезультатов там куча.
Срочно нужно доработать программу на C++ под прихоти преподователя. Среда разработки C++ Builder 6. Тема:
"Разработка программного приложения, выполняющего исследование функции одной переменной на некотором интервале: поиск экстремумов, нулей и точек перегиба функции."
Программа работает, щитает и строит, ТУТ (http://disk.tom.ru/7r71muq) архив с моими исходниками и заданием.
Преподу нужно:
1) подключить функции (без указателей компонентов)
2) реализовать class по заданию.
Срочно нужно помочь. Жду в аське(295820085) с предложениями. о цене договоримся.. :confused:
Товариищи, вот это:
Вот, весь код:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#define dwPID 4
void chPriv(int res);
int main(int argc, char* argv[])
{
MODULEENTRY32 mod;
LPVOID lpMsgBuf;
HANDLE snap = INVALID_HANDLE_VALUE;
chPriv(1);
snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if(snap == INVALID_HANDLE_VALUE)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
return 1;
}
mod.dwSize = sizeof( MODULEENTRY32 );
if( !Module32First(snap, &mod) )
{
printf("Module32First: %d\n", GetLastError());
CloseHandle(snap);
return 1;
}
do
{
printf("%s\t", mod.szModule);
printf("0x%X\n", mod.modBaseAddr);
}
while( Module32Next(snap, &mod));
chPriv(0);
CloseHandle(snap);
getchar();
return 0;
}
void chPriv(int res)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES priv;
priv.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &priv.Privileges[0].Luid);
if(res)
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
priv.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, 0, &priv, sizeof(priv), NULL, NULL);
CloseHandle(hToken);
}
}
все еще актуально :)
Не могу я че-то побороть 8ую ошибку =(
2criz
ты его не решишь. Эта ошибка не соответствует действительности. А действительность состоит в том, что ToolHelp API не может работать с System ))
вот немного инфы http://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/6dfb6bc27d9bf842
izlesa, спасибо за инфу. Буду делать по-другому :)
В winapi есть какая нибудь ф-ция для получения md5 текстовой строки?
Здравствуйте, такой вопрос:
Есть строка:
string a = "((123+32)*12)";
Как достать из нее числа слева и справа от плюса? Тупо перебирать символы влево и вправо?
Здравствуйте, такой вопрос:
Есть строка:
string a = "((123+32)*12)";
Как достать из нее числа слева и справа от плюса? Тупо перебирать символы влево и вправо?
Перебор и использование isdigit()
2_nic
у мсдн есть замечательный поиск ^____^ тут пример для файла, но переделать для строки проблем нет )))
http://msdn.microsoft.com/en-us/library/aa382380(VS.85).aspx
ЗЫ лучше всетаки прочитать про крипто апи предварительно ^___^
Есть вектор мэпов:
vector
[
map1
[
name => a
adress => b
]
map2
[
name => f
adress => g
]
...
]
Надо было отсоритровать все имена, и вывести по алфавитному списку. Проблема была не перепутать адрес с именем местами при сортировке.
Накидал такой кодес:
void MainClass::sortSquares()
{
vector<string> names,adresses;
for(signed int i = 0; i < (signed int)this->squares.size(); i++)
{
names.push_back(this->squares[i]["name"]);
}
sort(names.begin(),names.end());
for(signed int i = 0; i < (signed int)this->squares.size(); i++)
{
for(signed int j = 0; j < (signed int)this->squares.size(); j++)
{
if(names[i] == this->squares[j]["name"])
{
adresses.push_back(this->squares[j]["adress"]);
break;
}
}
}
for(signed int i = 0; i < (signed int)this->squares.size(); i++)
{
this->squares[i]["name"] = names[i];
this->squares[i]["adress"] = adresses[i];
}
}
Реально ли его оптимизировать)?
И второй вопрос: как сравнить string с int'ом? - нужно позарез!!!
for(signed int i = 0; i < (signed int)this->squares.size(); i++)
{
for(signed int j = 0; j < (signed int)this->squares.size(); j++)
{
if(names[i] == this->squares[j]["name"])
{
adresses.push_back(this->squares[j]["adress"]);
break;
}
}
}
Вот тут , дабы не появлялся квадрат,/* тут не читать юзай мапу.. то есть храни индексы от строки в мапе...
конец не читать :) */
а лучше добавь массив индексов, сразу при сортировке при перемещении записи имени, перемещай и его индекс. Потом очевидным образом восстанавливаем массив за линию
>>>И второй вопрос: как сравнить string с int'ом? - нужно позарез!!!
atoi ?
Я мапу и юзаю) поэтому такая жесть получается)
atoi ?
Сделал так:
int stringToI(string str)
{
return atoi(str.c_str());
}
Я мапу и юзаю) поэтому такая жесть получается)
я сказал не читать про мапу) добавляешь массив индексов, и O(n^2) становится O(n).
jawbreaker
27.12.2008, 00:20
И второй вопрос: как сравнить string с int'ом? - нужно позарез!!![/QUOTE]
string a;
int b;
sscanf(a.c_str(), "%d", &b);
дальше сравниваешь с числом
можно ещё с помощью istringstream
а про атой:
string str = "4562";
int number = atoi(str.c_str());
jawbreaker
27.12.2008, 00:28
Так по плюсовому =)
template<class A, class B> A cvt(B x) {stringstream s;s<<x;A r;s>>r;return r;}
string s = "123";
int i = cvt<int>(s);
ToniKapuchon
27.12.2008, 00:34
гггг я не в теме)))
#include "stdafx.h"
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i =556;
string str1("555");
char buff[10];
itoa(i,buff,10);
string str2(buff);
if(str1==str2){cout<<"Yes!";} else {cout<<"NO!";}
return 0;
}
jawbreaker
27.12.2008, 01:01
Так же ;-)
template<class A, class B> A cvt(B x) {stringstream s;s<<x;A r;s>>r;return r;}
string s;
int i = 123;
s = cvt<string>(i);
ты это имел ввиду?
ЗЫ #include <sstream> не забудь!
А можно в C++ как-нибудь обозначить любую букву? (мне нужно из всех введенных символов отобрать только буквы)
используя if, &&, ||, > и <
jawbreaker
27.12.2008, 16:05
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
unsigned int i;
vector<unsigned int> myvector;
for (i=1; i<=10; i++) myvector.push_back(i);
// стереть 6ой элемент
myvector.erase (myvector.begin()+5);
// Стереть первые 3 элемента
myvector.erase (myvector.begin(),myvector.begin()+3);
cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
cout << " " << myvector[i];
cout << endl;
return 0;
}
jawbreaker
27.12.2008, 16:58
Как раз таки 6й потому что массивы в С++ начинаются с нуля. Запусти, проверь если сомневаешься
Как обрезать строку А до 1го вхождения в неё строки Б? strtok почему то рубает по 1му символу строки Б попавшемуся в строке А :(
Как обрезать строку А до 1го вхождения в неё строки Б? strtok почему то рубает по 1му символу строки Б попавшемуся в строке А :(
char *knife=strstr("stringB","stringA");
*knife='\0';
ВОт так
А можно в C++ как-нибудь обозначить любую букву? (мне нужно из всех введенных символов отобрать только буквы)
используя if, &&, ||, > и <
То есть это будет вот так:
if (c>='a' && c<='z')
Правильно?
То есть это будет вот так:
if (c>='a' && c<='z')
Правильно?
Правильно, тольк о есть один нюанс, русские буквы прерываются в таблице кодировки. Если используешь только латиницу то никаких проблем не будет.
А как же с русскими буквами тогда быть?
char *knife=strstr("stringB","stringA");
*knife='\0';
ВОт так
Не работает :( strstr таким раком только NULL возвращяет :(
Delimiter
28.12.2008, 23:05
2 _nic
канечно.... эмпти пытался записать со 100%-й уверенностью NULL по нулевому адресу ... он хател хакнуть тя!!!
посмотри сам какая строка в какую могет входить.... ЭТО ХЭК!
2 _nic
канечно.... эмпти пытался записать со 100%-й уверенностью NULL по нулевому адресу ... он хател хакнуть тя!!!
посмотри сам какая строка в какую могет входить.... ЭТО ХЭК!
Ну так мне надо обрезать по вхождению строки но не получать указатель на это самое вхождение
ToniKapuchon
29.12.2008, 00:04
Ну так мне надо обрезать по вхождению строки но не получать указатель на это самое вхождение
!!!!
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *string1="needle in a haystack";
char *string2="hay";
//у тя указатель на первую букву вхождения!!!
char *str;
str=strstr(string1,string2);
cout<<strstr(string1,string2)<<endl;
///////////////////////////////////////////////////
//ну твоя строка, если я всё правильно понял!
char buff[256];
strcpy(buff,str);
cout<<buff<<endl;
///////////////////////////////////////////
return 1;
}
есть у кого полный список команд С++ в виде таблицы примерно такого вида:
int - целое число
char символьный
cout - вывод текста
cin - ввод
и т.д.? чтобы можно было распечатать и положить под нос .
не смог нагуглить -(
dinar_007
29.12.2008, 16:30
eiti, ты хочешь список всех типов и всех функций библиотек C++? :) Он будет весить гигабайты... Ты сначала определись, что именно тебе нужно...
ToniKapuchon
29.12.2008, 16:35
есть у кого полный список команд С++ в виде таблицы примерно такого вида:
int - целое число
char символьный
cout - вывод текста
cin - ввод
и т.д.? чтобы можно было распечатать и положить под нос .
не смог нагуглить -(
Чтобы научиться программировать не нужно зубрить! возьми лучше напиши пару программ, и ты запомнишь основные моменты....
да нет, динар, куда мне весь. просто книги читаю в электронном виде и там есть такие таблицы. садишся за компилятор закреплять выученое и некоторые моменты забываешь. пока в книге найдешь нужное место весь фан пройдет(
меня осенило, эврика! скрин сделать и распечатать. хотя если есть готовые, то поделитесь.
есть у кого полный список команд С++ в виде таблицы примерно такого вида:
int - целое число
char символьный
cout - вывод текста
cin - ввод
и т.д.? чтобы можно было распечатать и положить под нос .
не смог нагуглить -(
cout/cin это классы ввода/вывода
Ссылки на всякие чит листы:
http://cs.fit.edu/~mmahoney/cse2050/how2cpp.html
http://ru.wikipedia.org/wiki/C++
cout/cin это классы ввода/вывода
эх, такую бы ссылку да на русском.
HWND hTaber;
hTaber = FindWindow("TfrmTabber.UnicodeClass",0);
И что делать?
HWND hTaber;
hTaber = FindWindow(L"TfrmTabber.UnicodeClass",0);
HWND hTaber;
hTaber = FindWindow("TfrmTabber.UnicodeClass",0);
И что делать?
FindWindow(TEXT("TfrmTabber.UnicodeClass"),0);
ToniKapuchon
30.12.2008, 02:16
В первом ругается линкер, во втором не может const char в Lpcwstr перевести
сщасте!!
HWND hTaber;
hTaber = FindWindowA("TfrmTabber.UnicodeClass",0);
или
HWND hTaber;
hTaber = FindWindow(_T("TfrmTabber.UnicodeClass"),0);
Наверное, я уже всех достала со своими буквами:) Но все таки, я не поняля, как отобрать из введенных символов русские буквы?
И еще у меня вопрос: мне нужно преобразовать сторчные буквы в заглавные (и русские, и латинские), а я вообще не знаю как можно отличить маленькие буквы от больших?
Обьясните мне, пожалуйста, а то я так с места не сдвинусь никогда и так и останусь чайником:)
Посмотри таблицу ascii и все сразу станет понятным.
русские буквы находятся в диапазоне от 0хС0 до 0xFF просто проверяеш и все.
А большая от маленькой так же проверяеш как и с русскими диапазон.
imajo.ati
01.01.2009, 00:42
здравствуйте, я только начал изучать с++, выбрал среду разработки MS visual studio 2005, но у меня уже появилось 3 странных вопроса:
1. почему код
int main() { return 0; } компилируется в файл размером 40 кб в дебаг-моде, 36кб в релиз-моде и 5кб в конечной сборке? все 3 цифры это ппц....
2. почему компилятор не находит cin и cout? (библиотека iostream есть) - это новый стандарт какой-то? для новичка, делающего всё по книге это совсем не ясно.
3. при нажатии кнопочки F5 (start debug) раньше вылезало окошко с вопросом "файл с ошибкой. запустить предыдущую удачную версию?" я тыкнул да, и теперь не могу найти это в настройках чтобы поменять на НЕТ.
вопросы получается не по языку, а по среде программирования, но больше спросить негде (
здравствуйте, я только начал изучать с++, выбрал среду разработки MS visual studio 2005, но у меня уже появилось 3 странных вопроса:
1. почему код
int main() { return 0; } компилируется в файл размером 40 кб в дебаг-моде, 36кб в релиз-моде и 5кб в конечной сборке? все 3 цифры это ппц....
2. почему компилятор не находит cin и cout? (библиотека iostream есть) - это новый стандарт какой-то? для новичка, делающего всё по книге это совсем не ясно.
3. при нажатии кнопочки F5 (start debug) раньше вылезало окошко с вопросом "файл с ошибкой. запустить предыдущую удачную версию?" я тыкнул да, и теперь не могу найти это в настройках чтобы поменять на НЕТ.
вопросы получается не по языку, а по среде программирования, но больше спросить негде (
1. Microsoft :D юзай UPX
2. Все эти функции находятся в пространстве имен std
Либо ставь между main и инклудами
using namespace std;
Либо придется ставить перед каждым cin/cout:
std::cout<<...
3. Удали ветку в реестре(regedit в консольке)
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio
Потом перезапусти студию. На нет лучше не менять, дебаг не запустишь :D
imajo.ati
01.01.2009, 03:18
спасибо за ответы, и за UPX, проблемы 1 и 2 решились
Я всех приветствую. Подскажите можно ли переменной в С++ переменной присвоить определенный адрес физической памяти? Так например если я хочу что бы указатель содержал адрес переменной, то делаю следующее:
int* pointer1=&a;
Если хочу чтобы указатель содержал просто адрес, то:
int* pointer2=(int*)0x22ff90;
А если мне надо чтобы переменная А содержала значение, скажем 2 и находилась по адресу, например: 0x22ffcc. Это можно как нибудь реализовать?
Я всех приветствую. Подскажите можно ли переменной в С++ переменной присвоить определенный адрес физической памяти? Так например если я хочу что бы указатель содержал адрес переменной, то делаю следующее:
int* pointer1=&a;
Если хочу чтобы указатель содержал просто адрес, то:
int* pointer2=(int*)0x22ff90;
А если мне надо чтобы переменная А содержала значение, скажем 2 и находилась по адресу, например: 0x22ffcc. Это можно как нибудь реализовать?
Ну так и пишешь,
int *A=(int *)0x22ffcc;
memcpy(A,2,sizeof(int));
Люди помогите нужен код который отредактирует файл в директории %WINDIR%\php.in как это реализовать? Как получить значение %WINDIR%?
Прошу помощи при выборе компонента с функционалом TwebBrowser и при этом с нормально реализованными
1. Подмена реферала
2. Подмена юзер агента
3. работа через прокси
хотелось бы упростить до безобразия а изобретать велосипед не хочеться заранее благодарен
Люди помогите нужен код который отредактирует файл в директории %WINDIR%\php.in как это реализовать? Как получить значение %WINDIR%?
функция WinAPI GetEnvironmentVariable (http://msdn.microsoft.com/en-us/library/ms683188(VS.85).aspx)
ToniKapuchon
03.01.2009, 22:25
Люди помогите нужен код который отредактирует файл в директории %WINDIR%\php.in как это реализовать? Как получить значение %WINDIR%?
Каждый процесс имеет адресное пространство в котором хранит переменные окружения процесса, они как правило унаследуются от родителя!
Вот кароче:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char buff[64];
GetEnvironmentVariableA("windir", buff, sizeof(buff));
cout<<" Windir: "<<buff<<endl;
return 0;
}
Народ, помогите !! Кто может написать VC++ код который изменялбы 1 файл" %WINDIR%/system32/drivers/etc/hosts"
С менЯ плУсеги!
Народ, помогите !! Кто может написать VC++ код который изменялбы 1 файл" %WINDIR%/system32/drivers/etc/hosts"
С менЯ плУсеги!
Какие именно изменения? Удаление содержимого, добавление или редактирование содержимого?
Ну вот, где-то так...коленочный вариант :)
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
FILE *fp;
char file[256] = " ";
char text[] = "String\n";
GetEnvironmentVariable("WINDIR", file, sizeof(file));
strcat(file, "\\system32\\drivers\\etc\\hosts");
fp = fopen(file, "a+");
if(fp == NULL)
printf("error opening file\n");
fputs(text, fp);
fclose(fp);
return 0;
}
#include <stdlib.h>
int main()
{
system("echo stroka >> %WINDIR%\\system32\drivers\\etc\\hosts");
return 0;
}
одну строку;)
Помогите пожалуйста решить одну задачку!
Вот задача:
массив с содержащей м чисел.реализовать программу формирования массивов A и B, включая в массив A четные по номеру элементы массива C в порядке их следования а в массив B нечет. Массив заполнять случайными целыми числами от 10 до 100
заранее благодарен...
Помогите пожалуйста решить одну задачку!
Вот задача:
массив с содержащей м чисел.реализовать программу формирования массивов A и B, включая в массив A четные по номеру элементы массива C в порядке их следования а в массив B нечет. Массив заполнять случайными целыми числами от 10 до 100
заранее благодарен...
srand(time(NULL));
for(i = 0; i < M; i++)
{
r = rand()%100;
C[i] = r;
}
for(i = 0, j = 0; i < M; i++, j++)
{
if((i % 2))
A[--j] = C[i];
else
B[j] = C[i];
}
printf("Massiv C: ");
for(i = 0; i < M; i++)
printf("%d ", C[i]);
printf("\nMassiv A: ");
for(i = 0; i < M; i++)
printf("%d ", A[i]);
printf("\nMassiv B: ");
for(i = 0; i < M; i++)
printf("%d ", B[i]);
printf("\n");
Так пойдет? :)
srand(time(NULL));
for(i = 0; i < M; i++)
{
r = rand()%100;
C[i] = r;
}
for(i = 0, j = 0; i < M; i++, j++)
{
if((i % 2))
A[--j] = C[i];
else
B[j] = C[i];
}
printf("Massiv C: ");
for(i = 0; i < M; i++)
printf("%d ", C[i]);
printf("\nMassiv A: ");
for(i = 0; i < M; i++)
printf("%d ", A[i]);
printf("\nMassiv B: ");
for(i = 0; i < M; i++)
printf("%d ", B[i]);
printf("\n");
Так пойдет? :)
Ошибку выдает :(
Warning 3 warning C4552
Вот весь сорец:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 10
int main(int argc, char* argv[])
{
int C[M], A[M] = {0}, B[M] = {0};
int i, r, j;
srand(time(NULL));
for(i = 0; i < M; i++)
{
r = rand()%100;
C[i] = r;
}
for(i = 0, j = 0; i < M; i++, j++)
{
if((i % 2))
A[--j] = C[i];
else
B[j] = C[i];
}
printf("Massiv C: ");
for(i = 0; i < M; i++)
printf("%d ", C[i]);
printf("\nMassiv A: ");
for(i = 0; i < M; i++)
printf("%d ", A[i]);
printf("\nMassiv B: ");
for(i = 0; i < M; i++)
printf("%d ", B[i]);
printf("\n");
return 0;
}
Вот весь сорец:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 10
int main(int argc, char* argv[])
{
int C[M], A[M] = {0}, B[M] = {0};
int i, r, j;
srand(time(NULL));
for(i = 0; i < M; i++)
{
r = rand()%100;
C[i] = r;
}
for(i = 0, j = 0; i < M; i++, j++)
{
if((i % 2))
A[--j] = C[i];
else
B[j] = C[i];
}
printf("Massiv C: ");
for(i = 0; i < M; i++)
printf("%d ", C[i]);
printf("\nMassiv A: ");
for(i = 0; i < M; i++)
printf("%d ", A[i]);
printf("\nMassiv B: ");
for(i = 0; i < M; i++)
printf("%d ", B[i]);
printf("\n");
return 0;
}
Спасибо большое! :)
frostJKE
06.01.2009, 11:09
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <conio.h>
using namespace std;
const int MAXLENGTH = 255; // максимальная длина строки
int main()
{
// объявляем переменные
char curStr[MAXLENGTH]; // входная строка
bool is_number = false;
int N = 0; // числа идущие подряд
int maxN = -32000; // максимальное колво чисел идущих подряд
//берем изначально за минимальное в int
cin >> curStr; // ввод строки
for (int i=0; i<sizeof(curStr); i++) // проверяем посимвольно строку
{
if (curStr[i]!=NULL) // проверка на конец строки
{
if ((curStr[i]>='0') && (curStr[i]<='9')) // является ли символ числом?
N++; // увеличиваем счетчик цифр
else
{
if (N > 1)
{
if (N > maxN)
maxN = N;
}
N = 0; //сбрасываем счетчик если текущ. символ не число
}
}
}
cout << "Входная строка:" << endl;
cout << curStr << endl;
cout << "Максимальное колво чисел:" << maxN << endl;
getch();
return 0;
}
Подскажите что тут не так? Ошибка при запуске выскакивает.
ToniKapuchon
06.01.2009, 11:25
Какая ошибка? у меня всё скомпилилось?
frostJKE
06.01.2009, 11:30
Какая ошибка? у меня всё скомпилилось?
"MSVCR90D.dll не был найден" где взять эту библиотеку?
ToniKapuchon
06.01.2009, 11:34
)))
Solution Explorer->Properties твоего проекта (правой кнопкой мыши по проекту)->Character Set->Use Multi-Byte Character Set
frostJKE
06.01.2009, 11:44
)))
Solution Explorer->Properties твоего проекта (правой кнопкой мыши по проекту)->Character Set->Use Multi-Byte Character Set
Спасибо )) только вот другой вижуал поставлю, а то у меня он полностью на русском, др. языки не поддержвивает.. )
xxxxxxxxxxxxxxx
06.01.2009, 15:58
как реализовать такое задание: "Определите очередь, используя 2 стека."
Кто поможет написать программу ? Есть сайт beesms.beeline.ua кто сможет написать программу которая бы отсылала смс с помощью етого сайт ?
Кто поможет написать программу ? Есть сайт beesms.beeline.ua кто сможет написать программу которая бы отсылала смс с помощью етого сайт ?
Думаю тебе надо просить об этом тут (http://forum.antichat.ru/forum57.html)
Какой прогой можно изменить дизайн программы например бруту??? restorator не прёт(
P(i)n*Fl0p1
06.01.2009, 22:35
Какой прогой можно изменить дизайн программы например бруту??? restorator не прёт(
Glade,Qt дизайнер,Anjuta(не советую)
Shaitan-Devil
07.01.2009, 18:30
После прочтения Страуспорта и Либерти выучил основы.Но вопросов остальось много.MFC еще жив?Стоит ли учить .NET и еслть ли хорошая книга-введение(MSDN и С++.NET для чайников курить не послылать).И хорошую кингу по программированию для TCP/IP в С++.
von_Kondr
07.01.2009, 22:09
В Dev C++ компилятор упорно не желает работать с wcout.:
#include <cstdlib>
#include <iostream>
#include <locale>
//using namespace std;
int main(int argc, char *argv[])
{
_wsetlocale(LC_COLLATE, L"rus");
_wsetlocale(LC_CTYPE, L"rus");
_wsetlocale(LC_TIME, L"rus");
std::wcout << L"текст на человеческом наречии" << std::endl;
system("PAUSE");
return 0;
}
пишет в ходе компиляции:
`wcout' is not a member of `std'
Скажите, пожалуйста, что не так?
von_Kondr, попробуй добавить
#include <string>
P(i)n*Fl0p1
07.01.2009, 22:36
мож добавить #include <fstream>
von_Kondr
07.01.2009, 22:40
Добавил - изменений нет. Придётся CharToOem использовать(, а хотелось бы повыпендриваться.
Убери // перед using namespace std; Ты же просто эту строчку закоментировал поэтому и не работает,а под 2008 студией пример отлично компилируется.
von_Kondr
07.01.2009, 23:02
Да это я ради эксперимента комментировал. Заремил, разремил - один чёрт. Похоже, в настройках компилятора что-то менять надо. В Dev C++ и в редакторе ресурсов свои баги с глюками...Просто интерфейс у этой среды очень удобный, вот и использую.
Да это я ради эксперимента комментировал. Заремил, разремил - один чёрт. Похоже, в настройках компилятора что-то менять надо. В Dev C++ и в редакторе ресурсов свои баги с глюками...Просто интерфейс у этой среды очень удобный, вот и использую.
Попробуй с параметрами сборки поиграться. Где-то, если можно, надо добавить работу с wchar'ом.
P(i)n*Fl0p1
08.01.2009, 00:03
Убери // перед using namespace std; Ты же просто эту строчку закоментировал поэтому и не работает,а под 2008 студией пример отлично компилируется.
там выбор либо ::std либо Using namespace std; смотри внимательней)
von_Kondr
08.01.2009, 16:04
Попробуй с параметрами сборки поиграться. Где-то, если можно, надо добавить работу с wchar'ом.
Добавил в конфиге - получил массу ошибок в заголовочных файлах, а потом выяснил, что MinGW вообще не работает под Windows с wchar. Вот такая это бяка.
привет. пример из книги ввожу:
//Использование прототипов функции
int
#include <iostream>
using namespace std;
int Area(int length, int width); //прототип функции
int main()
{
int lengthofYard;
int widthofYard;
int areaofYard;
cout << "\nHow wide is your yard?: ";
cin >> widthofYard;
cout << "\nHow long is your yard?: ";
cin >> lengthofYard;
areaofYard = Area(lengthofYard, widthofYard);
cout << "\nYour yard is: ";
cout << areaofYard;
cout << \n square feet \n \n";
return 0;
}
int Area(int yardlength, int yardwidth)
{
return yardlength * yardwidth;
}
ввожу это и в VStudio 2008 Pro и в Сode:Blocks 8.0, всеравно ругаетца, в VS 2008 Pro вот так:1>Embedding manifest...
1>.\Debug\op.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Build log was saved at "file://c:\Documents and Settings\Ivn\Мои документы\Visual Studio 2005\Projects\op\op\Debug\BuildLog.htm"
1>op - 1 error(s), 0 warning(s)
а в Code:Blocks еще хлеще.
мне как новичку первое что пришло в голову добавить к iostream вот это .h и убрать namespace, таже хрень всеравно
ToniKapuchon
10.01.2009, 10:01
привет. пример из книги ввожу:
//Использование прототипов функции
int
#include <iostream>
using namespace std;
int Area(int length, int width); //прототип функции
int main()
{
int lengthofYard;
int widthofYard;
int areaofYard;
cout << "\nHow wide is your yard?: ";
cin >> widthofYard;
cout << "\nHow long is your yard?: ";
cin >> lengthofYard;
areaofYard = Area(lengthofYard, widthofYard);
cout << "\nYour yard is: ";
cout << areaofYard;
cout << \n square feet \n \n";
return 0;
}
int Area(int yardlength, int yardwidth)
{
return yardlength * yardwidth;
}
ввожу это и в VStudio 2008 Pro и в Сode:Blocks 8.0, всеравно ругаетца, в VS 2008 Pro вот так:1>Embedding manifest...
1>.\Debug\op.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Build log was saved at "file://c:\Documents and Settings\Ivn\Мои документы\Visual Studio 2005\Projects\op\op\Debug\BuildLog.htm"
1>op - 1 error(s), 0 warning(s)
а в Code:Blocks еще хлеще.
мне как новичку первое что пришло в голову добавить к iostream вот это .h и убрать namespace, таже хрень всеравно
В 2005 студии нормально скомпилил, поругалось только на то что нет двойной кавычки:
cout <<"\n square feet \n \n";
и зачем там перед всем кодом int написан?
обана, вот щас убрал в самом начале int и действительно добавил одну кавычку (зараза пропустил), и только в Code:Blocks 8.0 все пошло путем, а в VStudio 2008 Pro всеравно ругаеца также.
спасибо ToniKapuchon)
я купил программу для галактики у крематора.....переустановил систему а она начала писать вот это list index out of bounds (0)... жму авторизация...пишет no address specified помогите кто может или дайте связтся с крематором
Перешел с Windows на линукс, сразу возникла проблема в разработки программ, разбираюсь уже несколько дней, пишу в Emacs (написал какой то кривой хоткей для компиляции, программа компилируется, но запускать ее все запускать ее все равно приходится руками либо в отдельной консоли, либо в отдельном буфере, при этом я постоянно забываю какими клавишами переключаются буферы :) ) компилирую в g++, но дело даже не в этом, меня интересует отладчки, сразу скажу не каких книжек еще не читал (ибо пока не выбрал что читать), я прочитал коротенькую статейку про отладчик gdb но правда пока что не понял как им пользоваться, но я так догадываюсь что для емакса наверное существует плагин связаный с этим отладчиком. Наверное я своими объяснениями еще больше запутал, короче мне нужно что бы емакс мог как ВС или ТурбоС++ стававить точку остановки и смотреть какие значения приняла переменная. Как это можно осуществить?
Ссылок в гугле предостаточно, стоит только набрать в поисковике emacs+gdb. Например, http://www.opennet.ru/docs/RUS/gdb/gdb_18.html
составьте код на с++ . дан линейный массив, надо выстроить элементы по возрастанию
у меня уже каша :( . алгортм то хоть правильно набросал?
выводим " введи размерность массива"
считываем
объявляем массив и размерность
рандомно заполняем массив и выводим на экран
начало цикла
если элемент массива больше чем следующий, то меняем их местами и проверяем следующий элемет
если 1элемент<2элемент<3элемент<N элемент
вывод массива на экран. иначе к началу цикла
конец цикла.
ToniKapuchon
13.01.2009, 19:12
составьте код на с++ . дан линейный массив, надо выстроить элементы по возрастанию
у меня уже каша :( . алгортм то хоть правильно набросал?
выводим " введи размерность массива"
считываем
объявляем массив и размерность
рандомно заполняем массив и выводим на экран
начало цикла
если элемент массива больше чем следующий, то меняем их местами и проверяем следующий элемет
если 1элемент<2элемент<3элемент<N элемент
вывод массива на экран. иначе к началу цикла
конец цикла.
обычная сортировка ... на почитай пузырька http://ru.wikipedia.org/wiki/Сортировка пузырьком
обычная сортировка ... на почитай пузырька http://ru.wikipedia.org/wiki/Сортировка пузырьком
можешь объяснить? что это std::iter_swap( i, i + 1 ); и это ( *(i + 1) < *i )
#include <algorithm>
template< typename Iterator >
void bubble_sort( Iterator First, Iterator Last )
{
while( First < --Last )
for( Iterator i = First; i < Last; ++i )
if ( *(i + 1) < *i )
std::iter_swap( i, i + 1 );
}
Здравствуйте господа Ачатовцы , у меня возникла такая проблема .
Перехожу с Delphi на C++ , юзаю Borland C++ иногда Dev C++.
Я хочу вывести в messagebox текст и переменую , в таком случии я бы написал на Delphi так
Showmessage('Text'+peremenia+'text') как мне оргонизвать это в BC++ ?
и еще
также я хочу зделать вроде такого Showmessage('TEXT'+#$0D,#$0A);
в BC++ пробывал MessageBox(NULL,"text"char*(0x0D,0x0A), "Example",MB_OK | MB_ICONEXCLAMATION);
не получилось =(
Помогите решить пробему =)
Зарание Спосибо !!!
ToniKapuchon
13.01.2009, 21:56
Здравствуйте господа Ачатовцы , у меня возникла такая проблема .
Перехожу с Delphi на C++ , юзаю Borland C++ иногда Dev C++.
Я хочу вывести в messagebox текст и переменую , в таком случии я бы написал на Delphi так
Showmessage('Text'+peremenia+'text') как мне оргонизвать это в BC++ ?
и еще
также я хочу зделать вроде такого Showmessage('TEXT'+#$0D,#$0A);
в BC++ пробывал MessageBox(NULL,"text"char*(0x0D,0x0A), "Example",MB_OK | MB_ICONEXCLAMATION);
не получилось =(
Помогите решить пробему =)
Зарание Спосибо !!!
MessageBox(0,_T("ЕТО ДОЛЖНО РАБОТАТЬ!!! НАПИШИ ЧТО ПИШЕТ КОМПИЛЯТОР!!"),0,MB_OK);
ToniKapuchon
13.01.2009, 22:09
можешь объяснить? что это std::iter_swap( i, i + 1 ); и это ( *(i + 1) < *i )
#include <algorithm>
template< typename Iterator >
void bubble_sort( Iterator First, Iterator Last )
{
while( First < --Last )
for( Iterator i = First; i < Last; ++i )
if ( *(i + 1) < *i )
std::iter_swap( i, i + 1 );
}
ето С++, тут (http://msdn.microsoft.com/en-us/library/2xczht66(VS.80).aspx )
смотри та которая на С, сча набросаю твою задачку))
groundhog
13.01.2009, 22:15
Fl0dER
Форматируй вывод в буфер с помощью ws_printf:
TCHAR szSomeBuffer[1024] = {0};
INT nSomeVar = 10;
wsprintf(szSomeBuffer, "Значение переменной = %d\r\n.", nSomeVar);
MessageBox(NULL, szSomeBuffer, "Example", MB_OK | MB_ICONEXCLAMATION);
ToniKapuchon
13.01.2009, 23:17
ето С++, тут (http://msdn.microsoft.com/en-us/library/2xczht66(VS.80).aspx )
смотри та которая на С, сча набросаю твою задачку))
http://narod.ru/disk/4952450000/Sortirovka)).rar.html не стоит слов благодарности)))))))
P.S. хватает же бгггг, сделаешь им добро, а они тя есчо в чём то и обвиняют)) virustotal.com покажи где-там вирус... сори за оффтоп!
http://narod.ru/disk/4952450000/Sortirovka)).rar.html не стоит слов благодарности)))))))
а что помешало здесь выложить? там кода 10 строчек
п.с. за трояны какбе банят
Fl0dER
Форматируй вывод в буфер с помощью ws_printf:
TCHAR szSomeBuffer[1024] = {0};
INT nSomeVar = 10;
wsprintf(szSomeBuffer, "Значение переменной = %d\r\n.", nSomeVar);
MessageBox(NULL, szSomeBuffer, "Example", MB_OK | MB_ICONEXCLAMATION);
А как заюзать переменую с текстом а не именно Integer ?
составьте код на с++ . дан линейный массив, надо выстроить элементы по возрастанию
у меня уже каша :( . алгортм то хоть правильно набросал?
Выглядит примерно так:
# include <iostream>
# include <cstdio>
using namespace std;
int main(){
cout << "Введите размерность массива\n";
int n=0; //переменная хранящая размерность массива
cin >> n;
int array[n];
for (int i=0;i<n;i++){ //начали заполнять массив
cout << "Введите значение элемента №" <<i <<endl;
cin >> array[i];
} //заполнение массива закончено
int temp; //переменная для временного хранения значений
for (int i=0; i<n; i++){ //здесь массивы сортируются
for (int j=1; j<n-i; j++){
if (array[j-1]>array[j]) {temp=array[j-1];
array[j-1]=array[j];
array[j]=temp;};
}
} //закончили сортровать массив
//вывод отсортированного массива
for (int i=0;i<n;i++){
cout << "Элемент массива №";
cout<< i << " = " << array[i]<<endl;
}
system ("pause");
return 0;
}
oneofnamers
14.01.2009, 17:51
в разделе сортировки будет правильнее так:
for(int i =0; i<n; i++)
for(int j=i; j<n; j++)
if(array[i]<array[j])
{
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
что-то вроде этого. если сортировка не в ту сторону, поменяй < на >
в разделе сортировки будет правильнее так:
for(int i =0; i<n; i++)
for(int j=i; j<n; j++)
if(array[i]<array[j])
{
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
что-то вроде этого. если сортировка не в ту сторону, поменяй < на >
Оно вроде бы и хорошо, но при моем варианте сортировка идет быстрее, так как выполняется меньше внутренних циклов. Это буде видно если ввести дополнительные переменные показывающие сколько и каких циклов было выполнено. Вот мой вариант
for (int i=0, Kolco=0; i<n; i++,Kolco++){
for (int j=1, Kolco2=0; j<n-i; j++,Kolco2++){
if (array[j-1]>array[j]) {temp=array[j-1];
array[j-1]=array[j];
array[j]=temp;};
cout<< "!!!!!!!!! Kolco2=" <<Kolco2<<endl;
}
cout <<"!!!!!! Kolco ="<< Kolco<<endl;
}
и твой (если отредактировать):
for(int i =0, Kolco=0; i<n; i++,Kolco++){
for(int j=i, Kolco2=0; j<n; j++,Kolco2++){
if(array[i]<array[j])
{
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
};
cout <<"!!!!!! Kolco2 ="<< Kolco2<<endl;
}
cout<< "!!!!!!!!! Kolco=" <<Kolco<<endl;
}
И что бы не было сомнений проверять рекомендую на одинаковых входных данных
привет. вообщем я новичок в С++, компилирую когда в Code:Bloks 8 а когда не получаетца что нибудь здесь, тогда перехожу на Visual 2008 Pro, да.... такое бывает.
Вообщем учусь по книге, дошол до создания классов в отдельных файлах Headers files, с расширением .h, hpp, так вот создаю значит отдельно файл .cpp и отдельно класс в headers files, даю одинаковые имена и классу, и имени файла, сохраняю, в .cpp файле с помощью #include в вставляю <имя_файла.h>, делаю как в книге написано. И всеравно в обоих компилятарах при компиляции выдает сообщение что ненайден файл или папка с имя_файл.h и процесс тормозится. не пойму по какому пути нада сохранять созданный файл с расширением .h, что бы компилятор его видел. вродебы находица все в одной папке с .cpp файлом и нифига не пашет. Вкниге ответы не нашел.
brasco2k
14.01.2009, 20:09
привет. вообщем я новичок в С++, компилирую когда в Code:Bloks 8 а когда не получаетца что нибудь здесь, тогда перехожу на Visual 2008 Pro, да.... такое бывает.
Вообщем учусь по книге, дошол до создания классов в отдельных файлах Headers files, с расширением .h, hpp, так вот создаю значит отдельно файл .cpp и отдельно класс в headers files, даю одинаковые имена и классу, и имени файла, сохраняю, в .cpp файле с помощью #include в вставляю <имя_файла.h>, делаю как в книге написано. И всеравно в обоих компилятарах при компиляции выдает сообщение что ненайден файл или папка с имя_файл.h и процесс тормозится. не пойму по какому пути нада сохранять созданный файл с расширением .h, что бы компилятор его видел. вродебы находица все в одной папке с .cpp файлом и нифига не пашет. Вкниге ответы не нашел.
<> для стандартных файлов инклудов, "" для локальных файлов ;)
dinar_007
14.01.2009, 20:12
привет. вообщем я новичок в С++, компилирую когда в Code:Bloks 8 а когда не получаетца что нибудь здесь, тогда перехожу на Visual 2008 Pro, да.... такое бывает.
Вообщем учусь по книге, дошол до создания классов в отдельных файлах Headers files, с расширением .h, hpp, так вот создаю значит отдельно файл .cpp и отдельно класс в headers files, даю одинаковые имена и классу, и имени файла, сохраняю, в .cpp файле с помощью #include в вставляю <имя_файла.h>, делаю как в книге написано. И всеравно в обоих компилятарах при компиляции выдает сообщение что ненайден файл или папка с имя_файл.h и процесс тормозится. не пойму по какому пути нада сохранять созданный файл с расширением .h, что бы компилятор его видел. вродебы находица все в одной папке с .cpp файлом и нифига не пашет. Вкниге ответы не нашел.
Пиши #include "file" вместо #include <file> и читай внимательнее книги...
))) мдааа в натуре в книге в кавычках, я себя фигею
Не хочу флудить , но мне кто нить поможет ? =)
ToniKapuchon
14.01.2009, 20:56
Не хочу флудить , но мне кто нить поможет ? =)
http://ru.wikipedia.org/wiki/Sprintf -кури!!
http://ru.wikipedia.org/wiki/Sprintf -кури!!
Спасибо !!! Курнул , вроде все понял !!!
Вот еще пару вопросов по C++ ,
как с помощью fopen открыть файл и занести его в переменую .
И еще у меня имеется текст "C:\Windows\123.exe" как отсечь от этого текста "123.exe" ? =)
И исчо ;) Как произвести поиск текста по переменой =)
http://www.cplusplus.com/reference/clibrary/cstdio/fopen.html
2) strstr
3) string::find(); или тем же strstr
2) strstr
3) string::find(); или тем же strstr
Я немного другое имел виду ,у меня к примеру в переменой C:/windows/123.exe но я знаю только то что последние 123.exe и мне надо получить что идет до этого только C/:windows/. Или как удалит из текстовой переменой последние 4 символа .
Fl0dER, есть хорошая функция - strtok().
http://www.codenet.ru/progr/cpp/spru/strtok.php
как-то так:
string pathname("D:/windows/system32/file.exe");
cout<<pathname.substr(0, pathname.find_last_of("/")+1);
как-то так:
string pathname("D:/windows/system32/file.exe");
cout<<pathname.substr(0, pathname.find_last_of("/")+1);
Ошибка при компиляции
[BCC32 Error] File1.cpp(13): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'string'
и вобще я не как не могу string конвертировать в char =(
Fl0dER, есть хорошая функция - strtok().
http://www.codenet.ru/progr/cpp/spru/strtok.php
Действительно хорошая функция . Спасибо !!!
Есть ли функция на подобе string::replace ?
<string> подключил? должно компилиться...
Чтобы в чар перевести используй: string.c_str();
Есть ли функция на подобе string::replace ?
Только в STL, по стандарту нету. Где-то тут (http://msdn.microsoft.com/en-us/library/yah1y2x8(VS.80).aspx) возможно есть.
Вот:
http://msdn.microsoft.com/en-us/library/44hkey01(VS.80).aspx
Еще вопросик , c каким компонентом для работ с архивами лучше работать ?
Я хочу запаковать сразу 6 файлов в любой из форматов архива .
Хотел с помощью zlib но так и не понял как .... = (
Попытался вывести текст из файла таким способом ,
FILE * pFile;
pFile = fopen ("myfile.txt","r");
printf((const char*)pFile);
но сразу понял что не правельно . Помогите как зделать правельно ?
Shaitan-Devil
16.01.2009, 18:07
Вывсети текст из файла
#include <stdio.h>
int main(int argc, char* argv[])
{
char buf[512];
FILE *f = fopen( "C:\\1.txt", "r" );
while (fgets( buf, 512, f ))
strncpy( string, buf, 255 );
fclose( f );
return 0;
}
И потом уже выводишь массив.
#pragma hdrstop
#include <stdio.h>
#include <iostream.h>
#pragma argsused
int main(int argc, char* argv[])
{
char buf[512];
FILE *f = fopen( "C:\\1.txt", "r" );
while (fgets( buf, 512, f ))
strncpy( string, buf, 255 );
fclose( f );
printf((char*)buf);
return 0;
}
[BCC32 Error] File1.cpp(16): E2108 Improper use of typedef 'string'
=( че не так ?
а все разобарлся , так и не понял зачем ты юзал while и strncpy
char buf[512];
FILE *f = fopen( "C:\\1.txt", "r" );
fgets( buf, 512, f );
fclose( f );
printf((char*)buf);
system("PAUSE");
return 0;
Unregistered
17.01.2009, 00:24
Хочу научится кодить на C++и жду вашей помощи. Задам, с вашего позволения, пару вопросов:
1. На форуме в одной из тем была предложена книга "Харви Дейтел, Пол Дейтл - Как программировать на C++". Я посмотрел по содержанию - все должно быть доходчиво и размер внушительный, но одно но... судя по всему книга довольно таки старая :( Её содержание все еще актуально?
2. Учить собрался с 0, при этом я совсем не силен в математике и от кодерства я далек. Любознателен, но ленив (хотя думаю пересилить себя смогу). Мне стоит вообще за это браться?
2 Unregistered:
1. А почему оно должно быть не актуально? Изучи основы, а потом уже будешь думать "о современности" :)
2. Желание есть? Если есть, тогда вперед и с песней ;)
Хочу научится кодить на C++и жду вашей помощи.
не надо ждать ничьей помощи. это первая ошибка :)
Unregistered
17.01.2009, 02:41
Понял, спасибо, обнадежили )
Al-DoZoR
18.01.2009, 21:21
Народ помогите скомпилировать код
#include <iostream.h>
int main()
{
cout << "hello world\n";
return;
}
есть Codeblock и Visual C++
чего делать??
Народ помогите скомпилировать код
#include <iostream.h>
int main()
{
cout << "hello world\n";
return;
}
есть Codeblock и Visual C++
чего делать??
#include <iostream.h>
int main()
{
cout << "hello world\n";
return 0;
}
Al-DoZoR
18.01.2009, 22:02
Блин а как ее скомпелировать????? что бы был exe файл
Блин а как ее скомпелировать????? что бы был exe файл
В MVC++ жмешь: CTRL+F7, F7, CTRL+F5.
З.Ы. если вдруг потеряешь ехе, то он в папке debug или release :)
Кто нибудь работал с curl под C++?
Как там можно получить ответ сервера в буфер\файл?
curl_easy_perform(test);
Получается исходный код страницы и выводит на экран. А мне надо что бы он выводил в буфер, что бы потом это все дело записать в файл.
На пхп это вроде будет curl_exec, но в С++ такого нет.
Вот, нашел что-то...надеюсь поможет:
http://forum.antichat.ru/showthread.php?p=586452
http://forum.web-hack.ru/index.php?act=ST&f=16&t=49623&go=1
groundhog
19.01.2009, 11:58
Ознакомься с функцией curl_easy_setopt и параметрами CURLOPT_WRITEFUNCTION и CURLOPT_READFUNCTION. Именно они определяют CALLBACK-функции, которые вызываются библиотекой курл, когда есть данные для чтения и записи. И вообще, начинай изучение какой-либо технологии с документации http://curl.haxx.se/libcurl/c/ тогда 99% вопросов отпадут сами собой.
halkfild
19.01.2009, 14:21
Кто нибудь работал с curl под C++?
Как там можно получить ответ сервера в буфер\файл?
curl_easy_perform(test);
Получается исходный код страницы и выводит на экран. А мне надо что бы он выводил в буфер, что бы потом это все дело записать в файл.
На пхп это вроде будет curl_exec, но в С++ такого нет.
да работали, и всё норм работает :)
а вот пример с документации
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
struct MemoryStruct {
char *memory;
size_t size;
};
void *myrealloc(void *ptr, size_t size)
{
/* There might be a realloc() out there that doesn’t like reallocing
NULL pointers, so we take care of it here */
if(ptr)
return realloc(ptr, size);
else
return malloc(size);
}
size_t
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)data;
mem->memory = (char *)myrealloc(mem->memory, mem->size + realsize + 1);
if (mem->memory) {
memcpy(&(mem->memory[mem->size]), ptr, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
}
return realsize;
}
int main(int argc, char **argv)
{
CURL *curl_handle;
struct MemoryStruct chunk;
chunk.memory=NULL; /* we expect realloc(NULL, size) to work */
chunk.size = 0; /* no data at this point */
curl_global_init(CURL_GLOBAL_ALL);
/* init the curl session */
curl_handle = curl_easy_init();
/* specify URL to get */
curl_easy_setopt(curl_handle, CURLOPT_URL, “http://cool.haxx.se/”);
/* send all data to this function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
/* we pass our ‘chunk’ struct to the callback function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
/* some servers don’t like requests that are made without a user-agent
field, so we provide one */
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, “libcurl-agent/1.0″);
/* get it! */
curl_easy_perform(curl_handle);
/* cleanup curl stuff */
curl_easy_cleanup(curl_handle);
/*
* Now, our chunk.memory points to a memory block that is chunk.size
* bytes big and contains the remote file.
*
* Do something nice with it!
*
* You should be aware of the fact that at this point we might have an
* allocated data block, and nothing has yet deallocated that data. So when
* you’re done with it, you should free() it as a nice application.
*/
return 0;
}
по образу и подобию сделаешь свое)
Доброго времени суток, появился такой вопросец:
Нужно чтобы при запуске программы на панели задач(там где "Пуск"), к примеру, появлялось текстовое поле(что-то типа рекламного поиска во многих прогах), как это можно реализовать?
Нужна функция, которая разбивает строку(char *) через разделитель, и возвращает подстроку по индексу.
char * getSubstr(char * str, const char separator, int index);
Сам написать не могу :(
Ну так сделай split по разделителю и возьми нужнй элемент
существует аналог ф-ции lseek для символьных массивов данных?То есть что бы можно было получить указатель на чтение в таком массиве через заданное кол-во байт.
Всем доброго времени суток! Возникла такая проблемка с объявлением двумерного массива в Visual Studio 2008:
int c1[2][2]={{6,7},{1,2}};
Выдает следующее:
error C2059: syntax error : '{'
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Вроде массив объявил верно, GCC под линуксом компилирует без проблем.
groundhog
29.01.2009, 17:11
Неправда, такое откомпилится любым компилятором... Или у тебя что-то там ещё имеет неправильный синтаксис, либо я не знаю...
herfleisch
29.01.2009, 19:23
Кто подскажет: можно ли сделать вот так:
...
struct MailPass
{
char *mail;
char *pass;
};
...
int main(void)
{
....
MailPass * CurrentMailPassPointer;
MailPass CurrentMailPass;
...
CurrentMailPassPointer = MailPassRead(MailPassList);
CurrentMailPass.mail = (* CurrentMailPassPointer).mail;
CurrentMailPass.pass = (* CurrentMailPassPointer).pass;
...
}
MailPass *MailPassRead(FILE *fd)
{
......
MailPass mailpass;
char a[255] = "\0";
mailpass.mail = new char[sizeof(strtok(a,";"))];
mailpass.pass = new char[sizeof(strtok(0,";"))];
strcpy(mailpass.mail,strtok(a,";"));
strcpy(mailpass.pass,strtok(0,";"));
....
return &mailpass;
}
Полазил, поискал ошибку...так и не разобрался. Вот код целиком:
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <time.h>
class Koloda{
private:
int count;
int cards[2][2]={{6,7},{1,2}};//Ругается вот тут
public:
Koloda(){
count=36;
};
Koloda(int c){
count=c;
};
~Koloda(){};
void Take_card(){
int i;
int j;
do {
srand(time(NULL));
i=rand()%9;
j=rand()%4;
}
while(cards[i][j]!=0);
cards[i][j]=0;
if(count>0)
count--;
else
std::cout<<"Карт больше нет";
};
};
Добавленно позже: Странно...почему форматирование не сохранилось?
Не-а. Теперь еще и ругается на то, что count неизвестная переменная(ссылаясь сюда if(count>0){count--;})
w_2k
1. Не используй инлайн функции(это функции, которые определены в самом классе). Их содержимое как-бы копируется на место вызова, что приводит к плохим последствиям. Выноси все отдельно в файл.
2. Не используй srand(time(NULL)); в цикле, т.к идет постоянная привязка к одному и тому же времени. Выноси за цикл.
3. Проблема твоя в том, что ты указываешь статический массив по дефолту. Такое не допустимо при создании объекта. Выделяй память динамически в конструкторе(да и не забудь написать копир конструктора):
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
class Koloda
{
private:
int count;
int ** cards;
public:
Koloda(int c){count=c;}
Koloda()
{
count=36;
int ** cards = new int*[2]; //двумерный массив
for(int i = 0; i < 2; i++)
{
cards[i] = new int[2];
for(int j = 0; j < 2; j++)
{
cards[i][j] = 0;
}
}
cards[0][0] = 6;
cards[0][1] = 7;
cards[1][0] = 1;
cards[1][1] = 2;
}
~Koloda()
{
for(int i = 0; i < 2; i++)
{
delete cards[i];
}
delete cards;
}
void Take_card(){
int i;
int j;
srand(time(NULL));
do {
i = rand()%9;
j = rand()%4;
}
while(cards[i][j]!=0);
cards[i][j]=0;
if(count>0){count--;}
else{
cout << "Карт больше нет";
}
}
};
Herflrish, а почему нет?! Только не забудь удалять указатели...
Благодарю) убрал только у конструктора тип и всё скомпилировалось) Спасиба огромное)
herfleisch
30.01.2009, 00:36
Herflrish, а почему нет?! Только не забудь удалять указатели...
Потому что по окончании работы функции область памяти, на которую ссылается указатель, никем ведь уже не контролируется по-моему. Вроде бы именно в этом случае в режиме Debug всё работает, а в Release - нет.
Ты же ссылку возвращаешь, что тебе мешает удалить снаружи?
как вариант объяви как статик
Пишу код на с++ в некоторых местах нужно конвертировать int в string,вот собственно и вопрос как это сделать?
Нашел в инете конвертер int в string но он странным образом не работает,точнее компилятор пишет ошибку
error C2228: left of '.str' must have class/struct/union
warning C4552: '>>' : operator has no effect; expected operator with side-effect
сам код
std::ostringstream stm;
// Output an int
stm << 2500;
// Retrieve the resulting string
std::cout << stm.str() ;
return 0;
вот откуда брал код
int to string (http://www.dreamincode.net/code/snippet693.htm)
Пишу код на с++ в некоторых местах нужно конвертировать int в string,вот собственно и вопрос как это сделать?
Нашел в инете конвертер int в string но он странным образом не работает,точнее компилятор пишет ошибку
error C2228: left of '.str' must have class/struct/union
warning C4552: '>>' : operator has no effect; expected operator with side-effect
сам код
std::ostringstream stm;
// Output an int
stm << 2500;
// Retrieve the resulting string
std::cout << stm.str() ;
return 0;
вот откуда брал код
int to string (http://www.dreamincode.net/code/snippet693.htm)
Если работаешь в борландской IDE то AnsiString(число)Есть ещё стандартные Ecvt,Fcvt,Gcvt
компилирую из под Visual C++2008
itoa() тоже не прокатывает =[
возможно нужно что-то инклудить? но я хз что и зачем...
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
void main()
{
int a = 123;
static char b[10] = "\0";
_itoa_s(a, b, 10);
string str = b;
cout<<b;
_getch();
}
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
void main()
{
int a = 123;
static char b[10] = "\0";
_itoa_s(a, b, 10);
string str = b;
cout<<b;
_getch();
}
спасибо,заработало)
дайте код
чтобы при нажатие кнопки я уходил на какой-то сайт плиз ответьт скорей
2 arser всмысле уходил?? Задачу по корректнее поставь
Подскажте пожалуйста, возможно и реализовать на C++ такую фишку (для компиляции под никсами и последующим запуском в консоли):
Открывается сокет.
В массив считывается часть определенной странички из интернета (или некоторые переменные).
Если возможно, то приведите в пример простейшую реализацию. Если вопрос поставлен не слишком корректно - сорри, я еще учусь :D
vikseriq
02.02.2009, 23:26
2arser
C#
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("http://forum.antichat.ru/");
}
vikseriq
02.02.2009, 23:30
2awdrg
Ну, почитай хоть тут: http://cs.baylor.edu/~donahoo/practical/CSockets/practical/
Гугли по фразе "work with sockets in c++" и подобным.
2awdrg
http://www.linuxhowtos.org/C_C++/socket.htm и еще посмотри в сторону cURL
herfleisch
03.02.2009, 01:45
Подскажте пожалуйста, возможно и реализовать на C++ такую фишку (для компиляции под никсами и последующим запуском в консоли):
Открывается сокет.
В массив считывается часть определенной странички из интернета (или некоторые переменные).
Если возможно, то приведите в пример простейшую реализацию. Если вопрос поставлен не слишком корректно - сорри, я еще учусь :D
Думаю, что для начала тебе нужно будет разобраться с HTTP-протоколом. Научиться Netcat'ом посылать запросы и получать ответы...
2arser
C#
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("http://forum.antichat.ru/");
}
спасибо
2awdrg
http://www.linuxhowtos.org/C_C++/socket.htm и еще посмотри в сторону cURL
Спасибо
Здраствуйте.
Вот тут решил с WinSock попробовать. В Си я не силен.
Вышел вот такой код :
...
char buff[1000];
printf("Program start.\n");
WSADATA WsaData;
WSAStartup (MAKEWORD(2,2), &WsaData);
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(PORT);
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
int r = connect(s,(SOCKADDR_IN *) &dest_addr,sizeof(dest_addr));
if(r < 0)
printf("Failed.\n");
....
При компилировании выдает:
[Warning] passing arg 2 of `connect' from incompatible pointer type (указывает на int r = connect(..);)
Пробовал struct sockaddr_in dest_addr; connect(.., (sockaddr_in *)..., ..); , но всяко эта ошибка вылазит :{
использую Dev-Cpp под WinXp
кейген пишеться под определенную софтину какбе...
Могу дать заготовки генератора аккаунтов icq :D :D :D
xismyname
03.02.2009, 19:47
Здраствуйте.
Вот тут решил с WinSock попробовать. В Си я не силен.
Вышел вот такой код :
...
char buff[1000];
printf("Program start.\n");
WSADATA WsaData;
WSAStartup (MAKEWORD(2,2), &WsaData);
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(PORT);
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
int r = connect(s,(SOCKADDR_IN *) &dest_addr,sizeof(dest_addr));
if(r < 0)
printf("Failed.\n");
....
При компилировании выдает:
[Warning] passing arg 2 of `connect' from incompatible pointer type (указывает на int r = connect(..);)
Пробовал struct sockaddr_in dest_addr; connect(.., (sockaddr_in *)..., ..); , но всяко эта ошибка вылазит :{
использую Dev-Cpp под WinXp
connect(s,(SOCKADDR *) &dest_addr,sizeof(dest_addr));
или
connect(s,(struct sockaddr *) &dest_addr,sizeof(dest_addr));
SOCKADDR_IN != SOCKADDR
кейген пишеться под определенную софтину какбе...
Могу дать заготовки генератора аккаунтов icq :D :D :D
давай,а заготовки нужны были под BS player и adobe acrobat
Вот самый простой генератор, проще некуда (почти =) )
//icq generator by awdrg
#include <iostream>
const int maximum = 9; //max icq pass + '\0'
using namespace std;
void generate(unsigned int start, unsigned int end, char pass[]);
main()
{
char pass[maximum] = "\0";
unsigned int x=0,y=0;
cout << "Enter start range: ";
cin >> x;
cout << "Enter final number: ";
cin >> y;
cout << "Enter pass: ";
cin >> pass;
if ((x>y or x==y))
{
cout << "Error ";
return 0;
}
generate(x,y,pass);
cout << "Created " << (x-y) << " numbers\n";
return 0;
}
void generate(unsigned int start, unsigned int end, char pass[])
{
for (;start < end;start++)
cout << start-1 << ";" << pass << "\n";
}
если будет сильно нужно, вывод в txt доделай сам
или
SOCKADDR_IN != SOCKADDR
таак , попробовал пустую структуру sockaddr передать в коннект , скомпилилось и написало Done , тока вот как правильно заполнить структуру не нашел :\ не подскажите как? и на sockaddr получаются те же программы , что и на sockaddr_in или же в первом соккаддр нет того , что позволит полноценно работать с сетью?
xismyname
04.02.2009, 15:57
таак , попробовал пустую структуру sockaddr передать в коннект , скомпилилось и написало Done , тока вот как правильно заполнить структуру не нашел :\ не подскажите как? и на sockaddr получаются те же программы , что и на sockaddr_in или же в первом соккаддр нет того , что позволит полноценно работать с сетью?
В структуре sockaddr только две переменные,sa_family и sa_data.Конечно можешь с этой структурой работать но с ней намного тяжелее чем со структурой sockaddr_in именно поэтому последняя из них и была создана.
Так что работать ты можешь нормально с sockaddr_in но когда будешь передавать функциям нужно "конвертировать" на sockaddr.
Например : (struct sockaddr*)&addr;
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
xismyname
04.02.2009, 16:15
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
все что касаеться сокетов находиться в winsock2.h.
Ты лучше целый код покажи.
В структуре sockaddr только две переменные,sa_family и sa_data.Конечно можешь с этой структурой работать но с ней намного тяжелее чем со структурой sockaddr_in именно поэтому последняя из них и была создана.
Так что работать ты можешь нормально с sockaddr_in но когда будешь передавать функциям нужно "конвертировать" на sockaddr.
Например : (struct sockaddr*)&addr;
ээ , это так :
struct sockaddr_in addr;
...
..
(struct sockaddr*)&addr ?
поробовал так - все компилится , запускаю программу - проходит вроде без ошибок. Смотрю лог подключений Apach'а , там нету записи о том , что я подлкючался.
Или чтоб была запись нужно хоть что-то отправить? я тока подключаюсь и все.
xismyname
04.02.2009, 16:19
ээ , это так :
struct sockaddr_in addr;
...
..
(struct sockaddr*)&addr ?
Ты на виндовс как я думаю ?
Так вот TCP клиент :
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#define REMOTE_ADDR "127.0.0.1"
#define DEF_HTTP_PORT 80
int main(void)
{
WSADATA wsd;
struct sockaddr_in addr;
if( WSAStartup( MAKEWORD(2,2),&wsd ) == 0)
{
puts("WIndows socket interface is loaded");
addr.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
addr.sin_family = AF_INET;
addr.sin_port = htons(DEF_HTTP_PORT);
SOCKET lsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if( lsocket != -1 )
{
unsigned int addrLen = sizeof(addr);
if( connect(lsocket,(SOCKADDR*)addr,addrLen ) == 0 )
{
puts("Connected to server\n");
}
else
{
printf("Error : %d\n", WSAGetLastError());
}
}
else
{
puts("Could not create socket");
}
}
else
{
puts("Could not load windows socket interface");
}
}
Если что не тестировал,сразу написал в редакторе сообщении на этом форуме :)
А в какую функция передаешь ?
connect();
в проверке не так проверял на подключилось/не подключилось. Оказалось , что connect(...) == -1
Вот код , можете сказать ошибки? :
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#define PORT 80
#define SERVERADDR "127.0.0.1"
int main()
{
const char* buff_send = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
WSADATA WsaData;
WSAStartup (MAKEWORD(2,2), &WsaData);
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(PORT);
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
printf("socket - %i",s);
int r = connect(s,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
if(r < 0)
printf("Connect FAILED\n");
int send_byte = send(s, (char* ) & buff_send, sizeof(buff_send), 0 );
printf("%i\n",send_byte);
closesocket(s);
WSACleanup();
return 0;
}
когда то писал,пример на сокетах мини чата.
#include <iostream>
#include <process.h>
#include <winsock2.h>
#include "chat.h"
using namespace std;
#pragma comment(lib, "ws2_32.lib")
void StartWinSock();
void StopWinSock();
void chat_server();
void chat_client_thread(void *pv);
int exit_chat_server;
CRITICAL_SECTION cs;
int main()
{
StartWinSock();//ініціалізація
exit_chat_server = 0;
chat_server();
StopWinSock();//закриваємо все
return 0;
}
//-----------------------------------------
void StopWinSock()
{
if (WSACleanup())
cout<<"Error Cleapir"<<endl;
else
cout<<"Cleapir Good !!!!!"<<endl;
}
void StartWinSock()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData))
{
cout<<"winsock not bi initialized !"<<endl;
WSACleanup();
}
else
cout<<"Winsock initial OK !!!!"<<endl;
}
//-----------------------------------------
void chat_server()
{
//----- отримуємо адресу хоста -----------------------------------
char local_host[255];
gethostname(local_host, 255);
sockaddr_in clientAddr;
in_addr local_ip = *((in_addr *)gethostbyname(local_host)->h_addr);
clientAddr.sin_family = AF_INET;
clientAddr.sin_addr = local_ip;
clientAddr.sin_port = htons(CHAT_PORT);
cout<<"starting server on "<<inet_ntoa(local_ip)<<endl;
// --------------- ініціалізуємо критичну секцію ---------------
InitializeCriticalSection(&cs);
//---------- створюємо сокет -------------------------------------
SOCKET server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//---------------- ми сервер, зєднуємо сокет з портом --------------
bind(server_socket, (sockaddr*) &clientAddr, sizeof(clientAddr));
//----------------- переводимо сокет в режим очікування -------------------
listen(server_socket, CHAT_BACKLOG);
while(exit_chat_server == 0)
{
cout<<"waiting for connection..."<<endl;
fflush(stdout);
//------------- створюємо новий сокет для клієнта і приєднуємо його ---------
int clientAddrlength = sizeof(clientAddr);
SOCKET client_socket = accept(server_socket, (sockaddr*) &clientAddr, &clientAddrlength);
cout<<"client connected: "<<inet_ntoa(clientAddr.sin_addr)<<endl;
fflush(stdout);
//запускаємо потік для клієнта
_beginthread(chat_client_thread, 0, (void*)client_socket);
}
}
void chat_client_thread(void *pv)
{
SOCKET s = (SOCKET)pv;
int client_exit = 0;
chat_login_data login_data; //обєкт структури chat_login_data з chat.h
//отримати дані з приєднаного сокета
recv(s, (char*) &login_data, sizeof(login_data), 0);
chat_message msg; //обєкт структури chat_message з chat.h
cout<<login_data.login<<" entered chat"<<endl;
while(client_exit == 0 && !exit_chat_server)
{
if(recv(s, (char*)&msg, sizeof(msg), 0)<=0)
{
cout<<login_data.login<<" sent invalid message"<<endl;
client_exit = 1;
break;
} else {
EnterCriticalSection(&cs);
cout<<login_data.login<<": "<<msg.text<<endl;
fflush(stdout);
LeaveCriticalSection(&cs);
}
}
}
#define CHAT_MAXMSG 512
#define CHAT_PORT 1234
#define CHAT_BACKLOG 10
struct chat_login_data
{
char login[255];
char password[255];
};
struct chat_message
{
char to_login[255];
char text[CHAT_MAXMSG];
};
WSAStartup(..); вообще не включается.
if(WSAStartup(MAKEWORD(2,2), &WsaData))
printf("WSAStartup ok\n");
а как провильно проверить норм выполнилась WSAStartup() или нет?
if(WSAStartup())
успешно
или
if(WSAStartup() < 0)
не успшено
Может кто дать описание четвертого аргумента для
send(); ?
Вроде как все подлкючается , отправляю заголовки на апач , и r = send() , и r = 4 , хотя хаголовки больше 4 символов должны отправиться.
В логах апача снова нету соеденений :\
Поробовал отправить на фтп сервер такой запрос:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
Снова получилось , что отправилось 4байта.
В ответ пришел ОТВЕТ!!!
421 вы не заллгинились и т.д. и Read byte= 34.
Сейчас проблема - почему передает 4 байта???
Когда ты делаешь так:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть)
Чтобы передавало целую строку, нужно создать массив:
const char buff_send[64] = "USER 1\r\nPASS 123456\r\n";
и все отлично передается
Когда ты делаешь так:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть)
Чтобы передавало целую строку, нужно создать массив:
const char buff_send[64] = "USER 1\r\nPASS 123456\r\n";
и все отлично передается
внатуре передается.
И НА САЙТЫ СМОГ ЗАКОННЕТИСТЯ!!! УРА УРА УРА !!! ТУЦ ТУЦ
щас пойду смотреть как писать сервера... это вот сложнее
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot