2016-07-15 13 views
-1

Wie können Sie die letzte empfangene Pakete IP-Adresse und Port und speichern Sie es als const char*?Get IP und Port als const char * in letzten recvfrom()

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

Der aktuelle Code verwendet wird, wird die IP jedoch auf unserer Port leer wird drucken, so glaube ich, es ist ein Thema USHORT sin_port-const char* strPort konvertieren.

Antwort

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

erstellt eine temporäre string, wird die Adresse des string den internen Puffer und zerstört dann die string weil die string zu nichts zugeordnet ist. Das bedeutet, dass der Zeiger, der von c_str zurückgegeben wird und auf strPort verweist, ungültig ist und die Verwendung in undefiniertes Verhalten erfolgt.

Es ist wahrscheinlich am besten, nur die string herum zu halten, bis Sie es nicht mehr brauchen.

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

Oder

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

Sie brauchen es nicht:

short port = ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port); 
printf("%s | %d\n", strIP, port); 
Verwandte Themen