[英]wrong return value by function
我開發了c ++程序,我想在stl map中存儲clientadd,clientport,servaddr,servport。 我能夠傳遞值來映射和顯示地圖。 我顯示的值(clientadd,clientport,servport)正確顯示但servaddr錯誤。
map<int, Values> items;
Values connection (inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port),inet_ntoa(servaddr.sin_addr),ntohs(servaddr.sin_port));
items.insert(pair<int, Values> (0, connection));
cout << "Size of the items map : " << items.size() << endl;
map<int,Values>::const_iterator itemsIterator = items.begin();
while(itemsIterator != items.end() )
{
Values item = itemsIterator->second;
item.printValues();
itemsIterator++; //make the iterator point to the next pair in the map
}
class Values
{
private:
char *C_addr;
int C_port;
char *S_addr;
int S_port;
public:
Values(char*,int,char*,int);
void printValues();
};
Values :: Values(char *faddr,int fport,char *gwaddr,int gport)
{
C_addr=faddr;
C_port=fport;
S_addr=gwaddr;
S_port=gport;
}
void Values::printValues()
{
cout << C_addr<<":" <<C_port<< ":" << S_addr <<":" <<S_port << endl;
}
輸出我期待
127.0.0.1:任何端口號:0.0.0.0:任何端口號
(即客戶端地址,客戶端端口,服務地址,服務端口)
但我得到這樣的輸出
127.0.0.1:任何端口號:127.0.0.1:任何端口號
從inet_ntoa
的文檔 :
該字符串在靜態分配的緩沖區中返回,后續調用將覆蓋該緩沖區。
因此,兩個構造函數參數都指向同一個緩沖區,填充了最后寫入的地址。 如果其他一些代碼再次調用inet_ntoa
,那么它們甚至會成為wronger。
使用std::string
而不是指針來保持字符串的副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.