Int в PCSTR для Winsock DEFAULT_PORT

В меню, которое отображается первым делом при запуске приложения winsock, я хотел бы иметь возможность выбрать порт при запуске, но у меня возникают проблемы с преобразованием int в PCSTR или любым другим типом преобразования, как я пробовал несколько.

Вот некоторый код:

Мой заголовочный файл:

char* DEFAULT_PORT = "10187";

Мой файл cpp:

cout << "\n Input port: ";

cin >> UserDefinedPort;

if (UserDefinedPort > 1000){

char* p = p + UserDefinedPort;

DEFAULT_PORT = p;

} else {

// err...

}

Начало моей функции носка:

int SocketAddrInfo(int iResult, addrinfo* MySocket, addrinfo** MySocketResult){

iResult = getaddrinfo(NULL, DEFAULT_PORT, MySocket, MySocketResult);

if (iResult != 0) {

printf("Get address info failed with error: %d\n", iResult);

WSACleanup();

std::cout << "Server closing in 5 ";

for (int i = 4; i > 0; i--){

Sleep(1 * 1000);

cout << i << " ";

}

cout << "Server closing now!" << endl;

return 1;

}

return iResult;

}

Выдает ошибки чтения памяти или ошибки типа kernel.dll независимо от того, какой метод я пытаюсь использовать.

Любая помощь будет отличной, заранее спасибо!

1

Решение

Во-первых, эта строка неопределенное поведение:

char* p = p + UserDefinedPort;

Вы пытаетесь добавить число к указателю до того, как указатель будет даже инициализирован. Кроме того, вы не можете просто добавить номер к char* указатель для увеличения числового значения, которое char* Строка представляет. Вам нужно будет преобразовать строку в целое число, затем увеличить его, а затем преобразовать результат обратно в строку.

Я предлагаю другой подход. Повсеместно обрабатывайте сообщение как целое число и при вызове конвертируйте его только в строку getaddrinfo()Например:

unsigned short DEFAULT_PORT = 10187;

unsigned short UserDefinedPort;

cout << "\n Input port: ";
if (cin >> UserDefinedPort)
{
if (UserDefinedPort > 1000)
DEFAULT_PORT = UserDefinedPort;
else
{
// err...
}
}
else
{
// err...
}

#include <sstream>

int SocketAddrInfo(addrinfo* MySocket, addrinfo** MySocketResult)
{
std::ostringstream oss;
oss << DEFAULT_PORT;

int iResult = getaddrinfo(NULL, oss.str().c_str(), MySocket, MySocketResult);

//...
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]