尝试在C ++中进行函数式编程,并通过某种变异规则获取。
我有这段代码:
bpf_u_int32 netp, maskp;
struct in_addr addr;
// ...code
auto set_address_string = [&](auto &do_assign) {
if ((do_assign = inet_ntoa(addr)) == NULL)
cerr << "error - inet_ntoa() failed" << endl;
else
cout << "Some IP: " << do_assign << endl;
};
char *net, *mask;
addr.s_addr = netp;
set_address_string(net);
addr.s_addr = maskp;
set_address_string(mask);
cout << string(net) << endl;
当我预期net的内容被打印时,打印掩码的值,说net应该是“10.0.0.0”,掩码应该是“255.255.255.0”。
我认为这与&amp; amp;我用变量do_assign?
编辑:
实际输出为:
Some IP: 10.0.0.0
Some IP: 255.255.255.0
255.255.255.0
但预计是:
Some IP: 10.0.0.0
Some IP: 255.255.255.0
10.0.0.0
答案 0 :(得分:4)
从手册:
inet_ntoa()函数转换给定的Internet主机地址 以网络字节顺序,以IPv4点分十进制表示法的字符串。 该字符串在静态分配的缓冲区中返回,该缓冲区 后续调用将覆盖。
net
和mask
都指向同一个缓冲区,当然,缓冲区将包含最后一次调用的结果。