我的菜单在运行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的PCSTR DEFAULT_PORT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35569069/