寫緩衝區時兩次使用 inet_ntoa 的後果

來源:互聯網
上載者:User

原碼:

openvpn_snprintf (command_line, sizeof (command_line),
IPROUTE_PATH " add to %s/%d via %s table vpn",
inet_ntoa(m_aRes.VNet[i].ip),
j,
inet_ntoa(temp)
);
loglog(0, "%s\n", command_line);

在上面是往一個緩衝區裡寫一段字串, 但是使用了兩次inet_ntoa () 函數。 

結果列印出來的是:

ip route add to 172.18.1.0/24 via 172.18.1.0 table vpn

使得兩次的inet_ntoa 的結果是一樣的, 明顯是不正常的。


原因我也不是很清楚, 很明顯的就是看到了是被覆蓋了。

代碼改為:

char subip[32];
memset(subip , 0 , sizeof(subip));
strcpy(subip, inet_ntoa(m_aRes.VNet[i].ip));
openvpn_snprintf (command_line, sizeof (command_line),
IPROUTE_PATH " add to %s/%d via %s table vpn",
//inet_ntoa(m_aRes.VNet[i].ip),
subip,
j,
inet_ntoa(temp)
);

loglog(0, "%s\n", command_line);


這樣子列印出來的結果 就是正常的:

ip route add to 172.18.1.0/24 via 11.11.11.8 table vpn


說明在往一個緩衝區裡寫資料的時候不能連續使用多次inet_ntoa 。 



對了! 還有一種也是不正確 的:

代碼是:

char *subip = inet_ntoa(m_aRes.VNet[i].ip);
char *subtemp = inet_ntoa(temp);
openvpn_snprintf (command_line, sizeof (command_line),
IPROUTE_PATH " add to %s/%d via %s table vpn",
//inet_ntoa(m_aRes.VNet[i].ip),
subip,
j,
//inet_ntoa(temp)

subtemp 
);

loglog(0, "%s\n", command_line);

這樣列印出來的結果也是不正常的:

ip route add to 11.11.11.8 /24 via 11.11.11.8 table vpn



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.