Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выцарапать sin_addr как второе возвращаемое значение.  (Прочитано 7499 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mitia
Гость
« : 07-08-2005 12:05 » 

Я вызываю так:

char *ca_asrv;

rd_asrv = AcceptServer.Listen(acceptBuffer_asrv,sizeof(acceptBuffer_asrv), &ca_asrv);

В результате получаю в обещ ничего. Может преобразовываю не так?

------------------------
Код:
int myServer::Listen(char* buffer, int buf_size, char * b)
{
int len = 0;
int sockaddrlen = sizeof(sockaddr);
int sock2addrlen = sizeof(remoteaddr);

len = recvfrom(sock, buffer, buf_size, 0, (SOCKADDR*) &remoteaddr, &sock2addrlen);

*b = (int)inet_ntoa(remoteaddr.sin_addr);
if (len >= 0) buffer[len] = '\0';
return len;
}
« Последнее редактирование: 19-12-2007 18:31 от Алексей1153++ » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-08-2005 17:56 » 

Цитата
char *ca_asrv;

rd_asrv = AcceptServer.Listen(acceptBuffer_asrv,sizeof(acceptBuffer_asrv), &ca_asrv);
Ты передаешь не указатель на буфер, как того требуют условия, в указатель на указатель, который никуда не указывает!
Код:
char ca_asrv[32];
rd_asrv = AcceptServer.Listen(acceptBuffer_asrv,sizeof(acceptBuffer_asrv), ca_asrv);
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mitia
Гость
« Ответ #2 : 13-08-2005 22:58 » 

опять к вопросу...

Значит я создаю массим char длинной в 32 символа. Далее в функцию я передаю указатель на этот массив. А если я заранее не знаю, сколько мне надо запихнуть символов, если у меня 48, а не 32?  Можно ли как-нибудь создать безразмерный массив для приема данных? или же просто поставить 512, например?

И вот если я сделал так char as[32], то просто "as" будет обознеачать тип? Как его вывести на экран? cout<<as; даст ошибку, cout<<as[32] выдаст последний символ. Через wsprintf не могу перевести.


До второго вопроса вроде своими мозгами допер:
char * b;
b=&acceptBuffer[0];
cout<<b;

P.S.: извините, что спраишиваю почти что прописные истины Жаль(
« Последнее редактирование: 14-08-2005 00:20 от Mitia » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 14-08-2005 00:43 » 

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

Код:
char a[32];
Из этого определения получается: a - указатель на тип char в C. В C++ это указатель на char[32] (в зависмости от компилятора - может посчитать и указателем char - точнее - надо см. стандарт).
Когда ты указываешь индекс в прямоугольных скобках, ты обращаешься к указанному элементу массива. Индексы имеют нумерацию от 0 до (размер - 1) - в этом примере индекс 32 и более будет некоректен.

Рекомедую почитать какой-нибудь самоучитель по C/C++.

Спрашивай, но доки читай. Ага
« Последнее редактирование: 14-08-2005 00:45 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mitia
Гость
« Ответ #4 : 14-08-2005 01:12 » new

ну, то что 32 для примеря - я понимаю. Просто я реально не знаю, сколько данный должно прийти. Ну да ладно - буфер побольше и проблем не знаешь Улыбаюсь)

Доким есть: 1 ) Инет, 2) Уолтер Сэвитч

в общем змагаемся...  по мере продвижения практики Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines