【发布时间】:2018-04-28 19:45:04
【问题描述】:
我正在尝试打印一个函数返回的元组的元素,在该函数中我将地址向量的元素与数据库中的元素进行比较。字段分别为:32位int表示地址,int表示前缀匹配,字符串包含ASN,字符串包含匹配地址,字符串包含被查询的原始地址。
for (auto itr = IPs.begin(); itr != IPs.end(); itr++) {
tuple<int,int,string,string,string> entry = Compare(*itr, database);
string out = get<3>(entry) + "/" + to_string(get<1>(entry)) + " " + get<2>(entry) + " " + get<4>(entry) + "\n";
cout << out;
}
我希望输出的每一行看起来像这样: "{prefix}/{# bits of prefix} {ASN} {address}\n" 但是,输出如下所示:
12.105.69.1528 15314
12.125.142.190 6402
57.0.208.2450 6085
208.148.84.30 4293
208.148.84.16 4293
208.152.160.797 5003
192.65.205.2509 5400
194.191.154.806 2686
199.14.71.79 1239
199.14.70.79 1239
预期的输出是:
12.105.69.144/28 15314 12.105.69.152
12.125.142.16/30 6402 12.125.142.19
57.0.208.244/30 6085 57.0.208.245
208.148.84.0/30 4293 208.148.84.3
208.148.84.0/24 4293 208.148.84.16
208.152.160.64/27 5003 208.152.160.79
192.65.205.248/29 5400 192.65.205.250
194.191.154.64/26 2686 194.191.154.80
199.14.71.0/24 1239 199.14.71.79
199.14.70.0/24 1239 199.14.70.79
最让我困惑的部分是,当我通过用换行符替换每个分隔符将每个元素打印在单独的行上时,它会正确打印元素:
12.105.69.144
28
15314
12.105.69.152
12.125.142.16
30
6402
12.125.142.19
57.0.208.244
30
6085
57.0.208.245
208.148.84.0
30
4293
208.148.84.3
208.148.84.0
24
4293
208.148.84.16
208.152.160.64
27
5003
208.152.160.79
192.65.205.248
29
5400
192.65.205.250
194.191.154.64
26
2686
194.191.154.80
199.14.71.0
24
1239
199.14.71.79
199.14.70.0
24
1239
199.14.70.79
我想我可以编写另一个函数,之后将换行符格式化为正确的格式,但我很好奇是什么原因造成的。有什么想法吗?
【问题讨论】:
-
你为什么不直接把它打印到
cout没有那些临时字符串? -
对不起,那只是我在 cout
-
可能来自
entry的字符串包含一些垃圾? -
我觉得情况并非如此,因为当我打印用换行符分隔的所有内容时。我将每个字符串文字更改为换行符,并且元素输出正确。对正在发生的事情没有想法。
-
但是你有没有通过直接检查字符串内容来检查?