inet_ntoa函式使用疑問? |
尚未結案
|
speed
一般會員 ![]() ![]() 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
請教各位前輩,
使用inet_ntoa()時,
為何無法達到我想要的目的顯示出兩個不同IP位址?
#include |
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
speed 您好: 這真的是一個很奇怪的現象,我測試過之後,也沒搞懂問題是出在那裡?不過我用下列的變通方式可以達到您要的結果,您參考一下吧:
char buf[128]; struct in_addr ipa, ipb; ipa.s_addr = inet_addr("140.116.3.4"); ipb.s_addr = inet_addr("192.168.1.1"); AnsiString aa = inet_ntoa(ipa); AnsiString bb = inet_ntoa(ipb); wsprintf(buf, "IPA=%s , IPB=%s", aa.c_str(), bb.c_str()); MessageBox(NULL, buf, "test test", 0);發表人 - RedSnow 於 2005/06/08 01:34:45 |
speed
一般會員 ![]() ![]() 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
|
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
speed 您好: 呵呵~我們的困惑是一樣的,我用單步追蹤的方式查看數值的變化,結果發現就是會有您說的情形,所以我才試著透過暫存變數來分別儲存 inet_ntoa() 所傳回的值,然後再交給 wsprintf() 去處理。 原先我還曾經懷疑是 wsprintf() 配合的問題,因此我做過一個測試,結果就排除這個猜測了,您不妨試一下:
char *a1, *a2;
a1 = inet_ntoa(ipa);
a2 = inet_ntoa(ipb);
wsprintf(buf, "IPA=%s , IPB=%s", a1, a2);
當您使用除錯模式,將中斷點設在以紅色標示的那行,執行後您會發現 a1 的值是 "140.116.3.4",再按 F8 鍵執行下一行敘述後,a1 的值會變得與 a2 相同,都是 "192.168.1.1" 了,由這個結果來看,似乎 inet_ntoa() 的傳回對象是指標時,它會指向同一個位址,而 inet_ntoa() 本身將處理結果都是存放在一個固定的位址,以至於 a1 與 a2 取值時,都是取到相同的值。 因此我的推論就是,每次呼叫 inet_ntoa() 時,都必須要用一個非指標變數來取值,否則就會因為指標位址被修改指向同一位址,而取得相同的值。
|
Ktop_Robot
站務副站長 ![]() ![]() 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |