全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3976
推到 Plurk!
推到 Facebook!

inet_ntoa函式使用疑問?

尚未結案
speed
一般會員


發表:13
回覆:17
積分:6
註冊:2003-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-07 17:56:31 IP:220.141.xxx.xxx 未訂閱
請教各位前輩, 使用inet_ntoa()時, 為何無法達到我想要的目的顯示出兩個不同IP位址?    
#include 
#include     int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
        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");            wsprintf(buf,"IPA=%s , IPB=%s",inet_ntoa(ipa),inet_ntoa(ipb));
        MessageBox(NULL,buf,"test test",0);            return 0;
}
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-08 01:31:13 IP:219.137.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-08 03:00:07 IP:220.141.xxx.xxx 未訂閱
非常感謝RedSnow先生協助,    我自己查資料的結果發現, inet_ntoa()函式會用static variable存IP位址 可是,既然是static  結果應該是"最後"呼叫inet_ntoa()回傳ipb顯示的位址才對呀??    所以小弟百思不解!?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-08 14:15:58 IP:219.136.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-18 17:32:52 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-26 22:30:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!