Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2008, 20:35   #1
Retiz
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 21
По умолчанию C++: проблема с чтением строки ф-ей ReadConsole()

Добрый вечер!
Пишу консольную прогу на c++ + winapi
прога должна коннектиться к указанному ip через указанный порт
Кусок кода:
Код:
inp = GetStdHandle(STD_INPUT_HANDLE);
outp = GetStdHandle(STD_OUTPUT_HANDLE);
char text[500];
char sip[15];
int prt;
strcpy(text,"Enter IP: \n");
WriteConsole(outp,text,strlen(text),NULL,NULL);
ReadConsole(inp,text,sizeof(text),NULL,NULL);
strncpy(sip,text,strlen(text)-2);

 sprintf(text,"\nEnter port: ");
 WriteConsole(outp,text,strlen(text),NULL,NULL);
 ReadConsole(inp,text,10,NULL,NULL);
 prt = atoi(text);
  sprintf(text,"\n\n");

int s1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    SOCKADDR_IN sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(prt);
    sin.sin_addr.S_un.S_addr = inet_addr(sip);

err = connect(s1, (struct sockaddr*)&sin,sizeof(struct sockaddr));
Но ReadConsole() неверно считывает данные.
Ввожу IP: 127.0.0.1
порт: 1234
Фаер показывает, что прога пытается приконнектиться к адресу 255.255.255.255 через порт 0.
====
Для проверки добавил:
Код:
strcpy(text,"IP: ");
    WriteConsole(outp,text,strlen(text),NULL,NULL);
    strcpy(text,sip);
    WriteConsole(outp,text,strlen(text),NULL,NULL);
    sprintf(text,"\n%d\n",strlen(text));
    WriteConsole(outp,text,strlen(text),NULL,NULL);
    sprintf(text,"port: %d\n",prt);
    WriteConsole(outp,text,strlen(text),NULL,NULL);
Выводит:
IP: Enter IP:
9
port: 0

======
Помогите разобраться в проблеме )
Аналогичная программа без winapi (ip и порт читал cin'ом) работает без проблем.

PS: Winapi только начинаю изучать..
Retiz вне форума Ответить с цитированием
Старый 18.09.2008, 21:23   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Четвёртый параметр функции ReadConsole - адрес в памяти, куда функция будет записывать количество считанных символов (байт), поидее адрес не может быть равен нулю. Лично у меня с нулём вообще ничего не считывает.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 18.09.2008, 21:32   #3
Retiz
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 21
По умолчанию

Спасибо! Действительно когда добавил стал считать..
Просто думал, раз не использую, то и нет надобности его прописывать..
Retiz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом строки kezman Общие вопросы C/C++ 1 30.08.2008 20:41
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Строки. проблема сEOF Baron Общие вопросы C/C++ 1 13.01.2008 18:44
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45
Помогите с чтением параметра в реестре!! snake-as Общие вопросы Delphi 2 14.03.2007 15:50