簡體   English   中英

功能錯誤的返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM