gpt4 book ai didi

c++ - 函数返回值错误

转载 作者:行者123 更新时间:2023-11-28 02:55:45 26 4
gpt4 key购买 nike

我用 C++ 开发程序,我想在其中存储 clientadd、clientport、servaddr、servport在 STL map 中。我能够将值传递到 map 并从 map 显示。我显示的值正确显示(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 : 任意端口号

最佳答案

来自documentation inet_ntoa 的:

The string is returned in a statically allocated buffer, which subsequent calls will overwrite.

因此两个构造函数参数都指向同一个缓冲区,其中填充了恰好最后写入的地址。如果其他一些代码再次调用 inet_ntoa,那么它们会变得更加错误。

使用 std::string 而不是指针来保存字符串的拷贝。

关于c++ - 函数返回值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22038023/

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