gpt4 book ai didi

c - 在最后一个 recvfrom() 中以 const char* 形式获取 IP 和端口

转载 作者:行者123 更新时间:2023-11-30 18:51:02 26 4
gpt4 key购买 nike

如何获取最后收到的数据包的 IP 地址和端口并将其存储为 const char*

const char* strIP = inet_ntoa(((struct sockaddr_in*)&RecvAddr)->sin_addr);
const char* strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port)).c_str();
printf("%s | %s\n", strIP, strPort);

当前使用的代码将打印 IP,但是我们的端口将为空白,因此我认为转换 USHORT sin_port 是一个问题至const char* strPort .

最佳答案

const char* strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port)).c_str();

创建一个临时字符串,获取字符串内部缓冲区的地址,然后销毁字符串,因为字符串 没有分配给任何东西。这意味着 c_str 返回并由 strPort 引用的指针无效,并且使用它会导致未定义的行为。

最好保留字符串,直到您不再需要它为止。

std::string whatever = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port));
const char* strPort = whatever.c_str();

或者

std::string strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port));
printf("%s | %s\n", strIP, strPort.c_str());

关于c - 在最后一个 recvfrom() 中以 const char* 形式获取 IP 和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406252/

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