Int to PCSTR for 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: %dn", 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;
}

无论我尝试什么方法,它都会抛出读取内存错误或某种类型的内核.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);
    //...
}

相关内容

  • 没有找到相关文章

最新更新