информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
 Tailscale окончательно забанила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
к сожалению не помогает :((( 18.12.01 21:29  Число просмотров: 1274
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>


> вот тут весь мой БРЕД !!!
>
>
>
> #include <windows.h>
> #include <stdio.h>
> #define WM_SELECT WM_USER+1
>
> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
>
> bool ServerSock();
>
> char *str=new char[0x100];
> char *sendbuf=new char[0x100];
> char *getbuf=new char[0x1000];
> char s[0x100];
> int len;
> int err;
>
> MSG msg;
> HWND hWnd;
> RECT rect;
>
> SOCKET sock,newsock;
> WSADATA ws;
> sockaddr_in addr, newaddr;
>
> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE
> hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
> {
>
> WNDCLASS wndclass ;
>
> wndclass.style = CS_HREDRAW|CS_VREDRAW;
>
> wndclass.lpfnWndProc = WndProc;
> wndclass.cbClsExtra = 0;
> wndclass.cbWndExtra = 0;
> wndclass.hInstance = hInstance;
> wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION ) ;
> wndclass.hCursor = LoadCursor (NULL, IDC_ARROW ) ;
> wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
> wndclass.lpszMenuName = NULL ;
> wndclass.lpszClassName = "name" ;
>
> if(!RegisterClass(&wndclass))
> {MessageBox(NULL,"RegisterClass",NULL,NULL); return 0;}
>
> hWnd=CreateWindow("name","Win Socket
> Async",WS_OVERLAPPEDWINDOW,
> 10,10,350,250,NULL,NULL,hInstance,NULL);
>
> ShowWindow(hWnd,nCmdShow);
> UpdateWindow(hWnd);
>
> ServerSock();
>
> while(GetMessage(&msg,NULL,0,0))
> {
> TranslateMessage(&msg);
> DispatchMessage(&msg);
> }
> return msg.wParam;
> return 0;
>
> }
> LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM
> wParam,LPARAM lParam)
> {
> PAINTSTRUCT ps;
> HDC hdc;
> int size;
>
> switch(msg)
> {
> case WM_CREATE:
> len=err=0;
*************Bot ona, cheremuha******************
> getbuf=sendbuf="";
*********************************************************

> str="Server sleep";
> break;
> case WM_PAINT:
> hdc = BeginPaint(hWnd, &ps);
>
> GetClientRect(hWnd,&rect);
> len=0;
> while(str[len]!='\0')
> len++;
> TextOut(hdc,10,10,str,len);
> len=0;
> while(getbuf[len]!='\0')
> len++;
> TextOut(hdc,10,30,getbuf,len);
>
> EndPaint(hWnd, &ps);
> break;
> case WM_DESTROY:
> shutdown(sock,1);
> closesocket(sock);
> WSACleanup();
> PostQuitMessage(0);
> return 1;
> break;
> case WM_SELECT:
> switch(WSAGETSELECTEVENT(lParam))
> {
> case FD_ACCEPT:
> str="CLIENT CONNECT";
> InvalidateRect(hWnd,&rect,1);
> size =sizeof(newaddr);
>
> newsock=accept(sock,(sockaddr*)&newaddr,&size);
> if(newsock==INVALID_SOCKET)
> {
> str="invalid client
> socket";
>
> InvalidateRect(hWnd,&rect,1);
> shutdown(newsock,1);
> closesocket(newsock);
> }
> break;
> case FD_READ:
> err=recv(newsock,getbuf,0x100,0);
> if(err==SOCKET_ERROR)
> {
> str="bad recv";
> switch(WSAGetLastError())
> {
> case WSANOTINITIALISED:
> str="1";
> break;
> case WSAENETDOWN:
> str="2";
> break;
> case WSAEFAULT:
> str="3";
> break;
> case WSAENOTCONN:
> str="4";
> break;
> case WSAEINTR:
> str="5";
> break;
> case WSAEINPROGRESS:
> str="6";
> break;
> case WSAENETRESET:
> str="7";
> break;
> case WSAENOTSOCK:
> str="8";
> break;
> case WSAEOPNOTSUPP:
> str="9";
> break;
> case WSAESHUTDOWN:
> str="10";
> break;
> case WSAEWOULDBLOCK:
> str="11";
> break;
> case WSAEMSGSIZE:
> str="12";
> break;
> case WSAEINVAL:
> str="13";
> break;
> case WSAECONNABORTED:
> str="14";
> break;
> case WSAETIMEDOUT:
> str="15";
> break;
> case WSAECONNRESET:
> str="16";
> break;
> }
> }
> else
> {
> getbuf[err]='\0';
>
> MessageBox(NULL,getbuf,NULL,NULL);
> }
> InvalidateRect(hWnd,&rect,1);
> break;
> case FD_WRITE:
> // InvalidateRect(hWnd,&rect,1);
> // MessageBox(NULL,getbuf,NULL,NULL);
> break;
> }
> break;
> default:
> return
> DefWindowProc(hWnd,msg,wParam,lParam);
> break;
> }
> return 0;
> }
> bool ServerSock()
> {
> if(WSAStartup(0x101,&ws))
> {str="WSAStartup
> Error";InvalidateRect(hWnd,&rect,1);return 0;}
>
> sock=socket(AF_INET,SOCK_STREAM,0);
> addr.sin_addr.s_addr=INADDR_ANY;
> addr.sin_family=AF_INET;
> addr.sin_port=htons(80);
>
> if(bind(sock,(sockaddr*)&addr,sizeof(addr)))
> {str="this port is used";
> InvalidateRect(hWnd,&rect,1); return 0;}
>
> if(listen(sock,5))
> {str="listen Error";
> InvalidateRect(hWnd,&rect,1);return 0;}
>
> WSAAsyncSelect(sock,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLO
> SE);
>
> str="soket init !!!";
> InvalidateRect(hWnd,&rect,1);
>
> return 1;
>
> }
<programming>
Winsock - The buf parameter is not completely contained in a valid part of the user address space. 15.12.01 23:18  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
получаю данные
int recv( SOCKET s, char FAR *buf, int len, int flags);
но возникает следуйщая ошибка
WSAEFAULT
The buf parameter is not completely contained in a valid part of the user address space.
что это значит???
часть кода
...
char *getbuf=new char[0x1000];
...
case FD_READ:
err=recv(newsock,getbuf,sizeof(getbuf),0);
if(err==SOCKET_ERROR)
{
switch(WSAGetLastError())
{
case WSANOTINITIALISED:
str="1";
break;
case WSAENETDOWN:
str="2";
break;
case WSAEFAULT: // ВОТ ОНА И ВОЗНИКАЕТ
str="3";
break;
...
если не сложно подскажите
Winsock - The buf parameter is not completely contained in a valid part of the user address space. 17.12.01 00:59  
Автор: kabanchik Статус: Незарегистрированный пользователь
Отредактировано 17.12.01 01:00  Количество правок: 1
<"чистая" ссылка>
sledi za "^^^^"

> получаю данные
> int recv( SOCKET s, char FAR *buf, int len, int flags);
> но возникает следуйщая ошибка
> WSAEFAULT
> The buf parameter is not completely contained in a valid
> part of the user address space.
> что это значит???
> часть кода
> ...
> char *getbuf=new char[0x1000];
> ...
> case FD_READ:
> 		       
> err=recv(newsock,getbuf,sizeof(getbuf),0);
                               ^^^^^^^^^^^^^^^^^^^ - tut u tebya vsegda vozvrashaet 4, t.e. sizeof(getbuf) == 4. VSEGDA !!!
poprobuj tak :
> err=recv(newsock, getbuf, 0x1000, 0);


> 			if(err==SOCKET_ERROR)
> 			{
> 				switch(WSAGetLastError())
> 				{
> 				case WSANOTINITIALISED:
> 					str="1";
> 					break;
> 				case WSAENETDOWN:
> 					str="2";
> 					break;
> 				case WSAEFAULT: // ВОТ ОНА
> И ВОЗНИКАЕТ
> 					str="3";
> 					break;
> ...


---
> если не сложно подскажите
к сожалению не помогает :((( 17.12.01 08:45  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
к сожалению не помогает :((( 18.12.01 17:53  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Togda daj infu kakoj socket ty sozdaesh'? bolocking ili non-blocking socket?
potom sledi chtoby tvoj buffer by l valid.
ne mozhet byt' takogo chtoby kod nepravil'no rabotal. ishi bug v tvoem kode.
к сожалению не помогает :((( 18.12.01 19:54  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
вот тут весь мой БРЕД !!!



#include <windows.h>
#include <stdio.h>
#define WM_SELECT WM_USER+1

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

bool ServerSock();

char *str=new char[0x100];
char *sendbuf=new char[0x100];
char *getbuf=new char[0x1000];
char s[0x100];
int len;
int err;

MSG msg;
HWND hWnd;
RECT rect;

SOCKET sock,newsock;
WSADATA ws;
sockaddr_in addr, newaddr;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION ) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW ) ;
wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "name" ;

if(!RegisterClass(&wndclass)) {MessageBox(NULL,"RegisterClass",NULL,NULL); return 0;}

hWnd=CreateWindow("name","Win Socket Async",WS_OVERLAPPEDWINDOW,
10,10,350,250,NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

ServerSock();

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
return 0;

}
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
int size;

switch(msg)
{
case WM_CREATE:
len=err=0;
getbuf=sendbuf="";
str="Server sleep";
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

GetClientRect(hWnd,&rect);
len=0;
while(str[len]!='\0')
len++;
TextOut(hdc,10,10,str,len);
len=0;
while(getbuf[len]!='\0')
len++;
TextOut(hdc,10,30,getbuf,len);

EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
shutdown(sock,1);
closesocket(sock);
WSACleanup();
PostQuitMessage(0);
return 1;
break;
case WM_SELECT:
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
str="CLIENT CONNECT";
InvalidateRect(hWnd,&rect,1);
size =sizeof(newaddr);
newsock=accept(sock,(sockaddr*)&newaddr,&size);
if(newsock==INVALID_SOCKET)
{
str="invalid client socket";
InvalidateRect(hWnd,&rect,1);
shutdown(newsock,1);
closesocket(newsock);
}
break;
case FD_READ:
err=recv(newsock,getbuf,0x100,0);
if(err==SOCKET_ERROR)
{
str="bad recv";
switch(WSAGetLastError())
{
case WSANOTINITIALISED:
str="1";
break;
case WSAENETDOWN:
str="2";
break;
case WSAEFAULT:
str="3";
break;
case WSAENOTCONN:
str="4";
break;
case WSAEINTR:
str="5";
break;
case WSAEINPROGRESS:
str="6";
break;
case WSAENETRESET:
str="7";
break;
case WSAENOTSOCK:
str="8";
break;
case WSAEOPNOTSUPP:
str="9";
break;
case WSAESHUTDOWN:
str="10";
break;
case WSAEWOULDBLOCK:
str="11";
break;
case WSAEMSGSIZE:
str="12";
break;
case WSAEINVAL:
str="13";
break;
case WSAECONNABORTED:
str="14";
break;
case WSAETIMEDOUT:
str="15";
break;
case WSAECONNRESET:
str="16";
break;
}
}
else
{
getbuf[err]='\0';
MessageBox(NULL,getbuf,NULL,NULL);
}
InvalidateRect(hWnd,&rect,1);
break;
case FD_WRITE:
// InvalidateRect(hWnd,&rect,1);
// MessageBox(NULL,getbuf,NULL,NULL);
break;
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
break;
}
return 0;
}
bool ServerSock()
{
if(WSAStartup(0x101,&ws))
{str="WSAStartup Error";InvalidateRect(hWnd,&rect,1);return 0;}

sock=socket(AF_INET,SOCK_STREAM,0);
addr.sin_addr.s_addr=INADDR_ANY;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);

if(bind(sock,(sockaddr*)&addr,sizeof(addr)))
{str="this port is used"; InvalidateRect(hWnd,&rect,1); return 0;}

if(listen(sock,5))
{str="listen Error"; InvalidateRect(hWnd,&rect,1);return 0;}
WSAAsyncSelect(sock,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLOSE);

str="soket init !!!";
InvalidateRect(hWnd,&rect,1);

return 1;

}
к сожалению не помогает :((( 18.12.01 21:29  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>


> вот тут весь мой БРЕД !!!
>
>
>
> #include <windows.h>
> #include <stdio.h>
> #define WM_SELECT WM_USER+1
>
> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
>
> bool ServerSock();
>
> char *str=new char[0x100];
> char *sendbuf=new char[0x100];
> char *getbuf=new char[0x1000];
> char s[0x100];
> int len;
> int err;
>
> MSG msg;
> HWND hWnd;
> RECT rect;
>
> SOCKET sock,newsock;
> WSADATA ws;
> sockaddr_in addr, newaddr;
>
> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE
> hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
> {
>
> WNDCLASS wndclass ;
>
> wndclass.style = CS_HREDRAW|CS_VREDRAW;
>
> wndclass.lpfnWndProc = WndProc;
> wndclass.cbClsExtra = 0;
> wndclass.cbWndExtra = 0;
> wndclass.hInstance = hInstance;
> wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION ) ;
> wndclass.hCursor = LoadCursor (NULL, IDC_ARROW ) ;
> wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
> wndclass.lpszMenuName = NULL ;
> wndclass.lpszClassName = "name" ;
>
> if(!RegisterClass(&wndclass))
> {MessageBox(NULL,"RegisterClass",NULL,NULL); return 0;}
>
> hWnd=CreateWindow("name","Win Socket
> Async",WS_OVERLAPPEDWINDOW,
> 10,10,350,250,NULL,NULL,hInstance,NULL);
>
> ShowWindow(hWnd,nCmdShow);
> UpdateWindow(hWnd);
>
> ServerSock();
>
> while(GetMessage(&msg,NULL,0,0))
> {
> TranslateMessage(&msg);
> DispatchMessage(&msg);
> }
> return msg.wParam;
> return 0;
>
> }
> LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM
> wParam,LPARAM lParam)
> {
> PAINTSTRUCT ps;
> HDC hdc;
> int size;
>
> switch(msg)
> {
> case WM_CREATE:
> len=err=0;
*************Bot ona, cheremuha******************
> getbuf=sendbuf="";
*********************************************************

> str="Server sleep";
> break;
> case WM_PAINT:
> hdc = BeginPaint(hWnd, &ps);
>
> GetClientRect(hWnd,&rect);
> len=0;
> while(str[len]!='\0')
> len++;
> TextOut(hdc,10,10,str,len);
> len=0;
> while(getbuf[len]!='\0')
> len++;
> TextOut(hdc,10,30,getbuf,len);
>
> EndPaint(hWnd, &ps);
> break;
> case WM_DESTROY:
> shutdown(sock,1);
> closesocket(sock);
> WSACleanup();
> PostQuitMessage(0);
> return 1;
> break;
> case WM_SELECT:
> switch(WSAGETSELECTEVENT(lParam))
> {
> case FD_ACCEPT:
> str="CLIENT CONNECT";
> InvalidateRect(hWnd,&rect,1);
> size =sizeof(newaddr);
>
> newsock=accept(sock,(sockaddr*)&newaddr,&size);
> if(newsock==INVALID_SOCKET)
> {
> str="invalid client
> socket";
>
> InvalidateRect(hWnd,&rect,1);
> shutdown(newsock,1);
> closesocket(newsock);
> }
> break;
> case FD_READ:
> err=recv(newsock,getbuf,0x100,0);
> if(err==SOCKET_ERROR)
> {
> str="bad recv";
> switch(WSAGetLastError())
> {
> case WSANOTINITIALISED:
> str="1";
> break;
> case WSAENETDOWN:
> str="2";
> break;
> case WSAEFAULT:
> str="3";
> break;
> case WSAENOTCONN:
> str="4";
> break;
> case WSAEINTR:
> str="5";
> break;
> case WSAEINPROGRESS:
> str="6";
> break;
> case WSAENETRESET:
> str="7";
> break;
> case WSAENOTSOCK:
> str="8";
> break;
> case WSAEOPNOTSUPP:
> str="9";
> break;
> case WSAESHUTDOWN:
> str="10";
> break;
> case WSAEWOULDBLOCK:
> str="11";
> break;
> case WSAEMSGSIZE:
> str="12";
> break;
> case WSAEINVAL:
> str="13";
> break;
> case WSAECONNABORTED:
> str="14";
> break;
> case WSAETIMEDOUT:
> str="15";
> break;
> case WSAECONNRESET:
> str="16";
> break;
> }
> }
> else
> {
> getbuf[err]='\0';
>
> MessageBox(NULL,getbuf,NULL,NULL);
> }
> InvalidateRect(hWnd,&rect,1);
> break;
> case FD_WRITE:
> // InvalidateRect(hWnd,&rect,1);
> // MessageBox(NULL,getbuf,NULL,NULL);
> break;
> }
> break;
> default:
> return
> DefWindowProc(hWnd,msg,wParam,lParam);
> break;
> }
> return 0;
> }
> bool ServerSock()
> {
> if(WSAStartup(0x101,&ws))
> {str="WSAStartup
> Error";InvalidateRect(hWnd,&rect,1);return 0;}
>
> sock=socket(AF_INET,SOCK_STREAM,0);
> addr.sin_addr.s_addr=INADDR_ANY;
> addr.sin_family=AF_INET;
> addr.sin_port=htons(80);
>
> if(bind(sock,(sockaddr*)&addr,sizeof(addr)))
> {str="this port is used";
> InvalidateRect(hWnd,&rect,1); return 0;}
>
> if(listen(sock,5))
> {str="listen Error";
> InvalidateRect(hWnd,&rect,1);return 0;}
>
> WSAAsyncSelect(sock,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLO
> SE);
>
> str="soket init !!!";
> InvalidateRect(hWnd,&rect,1);
>
> return 1;
>
> }
к сожалению не помогает :((( 19.12.01 00:34  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ОГРОМНО СПАСИБО!!!
У меня есть дополнительный вопросик
В чем моя ошибка ??? может это с моей стороны глупо звучит но я даже после того как ты указал мне на нее я не понимаю что тут такого. Конечно чисто интуитивно какие-то мысли по этому поводу у меня летают. но полет их так туманен и далек, что …
Что не верно ( как ошибку можно сформулировать)
char *sendbuf=new char[0x100];
char *getbuf=new char[0x1000];
…..
getbuf=sendbuf="";
…..
recv(newsock,getbuf,0x100,0);
…..
p.s. мне позор !!!!
Vykin etu strochku. 19.12.01 02:50  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Vykin etu strochku. 19.12.01 08:54  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я понял что надо выкинуть
но почему что в ней такого что она глючит всю прогу
меня интерисует почему. я просто не аонимаю что в ней такого
Vykin etu strochku. 21.12.01 13:23  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
Ваще лучше юзать не указатель на char а массив, например:
char buf[0x1000];
recv(sock, buf, sizeof(buf), 0);

Работает в 100% случаях!
Vykin etu strochku. 21.12.01 21:46  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Ваще лучше юзать не указатель на char а массив, например:
> char buf[0x1000];
> recv(sock, buf, sizeof(buf), 0);
>
> Работает в 100% случаях!

I chto ty dlia odnogo bita, 0x1000 bite bydeliat` budesh ? A esli dannyh bolshe chem 0x1000? Umnik e.p.r.s.t.
Vykin etu strochku. 23.12.01 12:54  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
> > Ваще лучше юзать не указатель на char а массив,
> например:
> > char buf[0x1000];
> > recv(sock, buf, sizeof(buf), 0);
> >
> > Работает в 100% случаях!
>
> I chto ty dlia odnogo bita, 0x1000 bite bydeliat` budesh ?
> A esli dannyh bolshe chem 0x1000? Umnik e.p.r.s.t.
ХаХаХа :)))
ну ты ламо!!
не знаешь - не 3.14зди!
Послушай лучше что знающие люди тебе говарят,
Если данные больше 0х1000, то если у тебя recv(socket, buf, sizeof(buf), 0), то придут данные исключительно размером sizeof(buf), остальные данные нужно получать ещо раз вызвав recv(socket, buf, sizeof(buf), 0)
А если данные меньше sizeof(buf), то полезно делать так:
int ret = recv(socket, buf, sizeof(buf), 0)
buf[ret] = 0;
Особенно если данные строковые
Удачи!!

Pampersy smeni, a to voniaet uzhe. 24.12.01 22:21  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Vykin etu strochku. 19.12.01 22:51  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
I voobche posmotri kak ty rabotaesh s "char*" ty ih putaesh veroiatno s CString (ili kakimo libo eche string obj), dlia raboty so stringami cheres char* ispolzui "C" String Manipulation function :
naprimer:
char string[80];
strcpy( string, "blah, blah blah!" );//scopirovali string

//ty zhe delal bot tak:
//string = "blah, blah blah!" ;
//chto ne est` verno, v dannom skuchee compiler zakrichit
//a esli zhe
//char* string = new char[80];
//togda ty perepishesh string pointer allocirovanniy by new operator na
//pointer ukazyvauchii na ->"blah, blah blah!"
Vykin etu strochku. 19.12.01 09:08  
Автор: SEH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> я понял что надо выкинуть
> но почему что в ней такого что она глючит всю прогу
> меня интерисует почему. я просто не аонимаю что в ней
> такого
Во-первых, сначала оба указателя указывали на буфер, теперь они указывают на константную строку ("" - это и есть указатель)
Во-вторых, похоже, что компилятор хранит указанную выше строку в другом сегменте , куда запись запрещена, поэтому и возникает такая ошибка

А вообще раз уж пишешь на C++, то используй нормальный класс для строк, а то char* - это такая гадость.

Все выше сказанное является 'IMHO'. Просьба близко к сердцу не принимать.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach