gpt4 book ai didi

c++ - 对 Winsock DEFAULT_PORT 的 PCSTR 的 Int

转载 作者:行者123 更新时间:2023-11-30 03:44:19 26 4
gpt4 key购买 nike

我在运行我的 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...

}

我的 socks 功能的开始:

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 错误。

任何帮助都会很棒,提前致谢!

最佳答案

首先,这一行是未定义的行为:

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);

//...
}

关于c++ - 对 Winsock DEFAULT_PORT 的 PCSTR 的 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35569069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com