Winsock DEFAULT_PORT 的 Int 到 PCSTR

问题描述 投票:0回答:2

我在运行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 错误。

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

c++ int winsock lpcstr
2个回答
2
投票

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

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

    //...
}

0
投票

您可以使用 std::string::c_str() 转换任何有效的整数类型,它与 PCSTR 兼容。

std::string(DEFAULT_PORT).c_str()
是最简单的方法,但您需要确保包含字符串标头:
#include <string>

© www.soinside.com 2019 - 2024. All rights reserved.