в результате имею:
192.168.1.1 192.168.1.1
192.168.1.2 192.168.1.2
192.168.1.30 192.168.1.30
192.168.1.4 192.168.1.4
192.168.1.5 192.168.1.5
192.168.1.40 192.168.1.40
255.255.255.255 255.255.255.255
Если я правильно понял, то ты ожидаешь увидеть на экране:
192.168.1.1 255.255.255.0
192.168.1.2 255.255.255.0
192.168.1.30 255.255.255.0
192.168.1.4 255.255.255.0
192.168.1.5 255.255.255.0
192.168.1.40 255.255.255.0
192.168.1.70 255.255.255.0
Если да, то проблема в том, что inet_ntoa возвращает указатель на внутренний статический буфер, поэтому строка
cout << inet_ntoa(sa1) << " " << inet_ntoa(sa2) << "\n";
дает ошибку. То есть результат первого вызова inet_ntoa сразу же затирается результатом второго вызова.
Нужно так:
cout << inet_ntoa(sa1) << " ";
cout << inet_ntoa(sa2) << endl;