線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1468
推到 Plurk!
推到 Facebook!

詢問有關struct的問題

答題得分者是:miyu
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-13 15:41:17 IP:61.222.xxx.xxx 未訂閱
請問各位: 我定義了一個struct,要如何將內容一次清除為0 ,及如何要一次搬移其資料要如何用呢? 以下是我的程式斷落 typedef struct { char IP[15]; char Port[5]; char UserID[8]; char Password[8]; }Option_Setup; Option_Setup Option; char *PACK; 而我曾試著用 memset(Option,0,sizeof(Option_Setup);來清除全部內容,但不行 而用 memmove(PACK,Option,sizeof(Option));來一次搬移全部內容,也不行 請問要如何做呢~請各位能夠幫忙~謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-13 15:50:42 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位: 我定義了一個struct,要如何將內容一次清除為0 ,及如何要一次搬移其資料要如何用呢? 以下是我的程式斷落 typedef struct { char IP[15]; char Port[5]; char UserID[8]; char Password[8]; }Option_Setup; Option_Setup Option; char *PACK; 而我曾試著用 memset(Option,0,sizeof(Option_Setup);來清除全部內容,但不行 而用 memmove(PACK,Option,sizeof(Option));來一次搬移全部內容,也不行 請問要如何做呢~請各位能夠幫忙~謝謝
kenbcb 你好:
(1)清除全部內容用 Win32 API ZeroMemory
   Option_Setup a;
   ZeroMemory(&a, sizeof(Option_Setup));
(2)搬移全部內容(複製) 用 Win32 API CopyMemory
   Option_Setup a;
   Option_Setup b;
   // ...... config a .....
   CopyMemory(&b, &a, sizeof(Option_Setup));
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/08/13 15:53:51
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-13 17:16:59 IP:218.160.xxx.xxx 未訂閱
引言: 而我曾試著用 memset(Option,0,sizeof(Option_Setup);來清除全部內容,但不行
應該可以,我都是這樣做的. 但從你的片斷程式看來,編譯一定不會過: Option_Setup Option; memset(Option,0,sizeof(Option_Setup); 改成: Option_Setup Option; memset(&Option,0,sizeof(Option_Setup)); or Option_Setup *Option; memset(Option,0,sizeof(Option_Setup)); 至於 memmove(PACK,Option,sizeof(Option)); 假如這行編譯可以過, 應該只能複製4BYTE. 改成 memmove(PACK,Option,sizeof(Option_Setup)); or memmove(PACK,&Option,sizeof(Option));
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-13 21:38:27 IP:61.229.xxx.xxx 未訂閱
不好意思~我還有一個問題如下: typedef struct{ char ID; short num; }Test; test testBuf; 而我用 sizeof(testBuf) 得到值為 4 ,不是應該為 3(char short=1 2)嗎? 麻煩各位指導~謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-13 21:53:16 IP:61.221.xxx.xxx 未訂閱
引言: 不好意思~我還有一個問題如下: typedef struct{ char ID; short num; }Test; test testBuf; 而我用 sizeof(testBuf) 得到值為 4 ,不是應該為 3(char short=1 2)嗎? 麻煩各位指導~謝謝
kenbcb 你好: 在 BCB 裡面選擇「Project/Options/Advanced Compiler」 然後把「Data Alignment」的設定改為「Byte」,按「OK」 重新編譯再執行看看 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-14 00:03:15 IP:61.219.xxx.xxx 未訂閱
引言: 不好意思~我還有一個問題如下: typedef struct{ char ID; short num; }Test; test testBuf; 而我用 sizeof(testBuf) 得到值為 4 ,不是應該為 3(char short=1 2)嗎? 麻煩各位指導~謝謝
Alignment的問題 為了增加存取速度, compiler會試著把每一個struct裡的資料對齊data bus的寬度, 以求得最快存取速度. 你可以考慮用 #pragma -a- 作 byte aligment #pragma -a2 = word alignmnet #pragma -a4 = double alignment #pragma -a8 or -a = quad word alignment #pragma -a16 = paragraph alignment 或是你也可以用 #pragma pack(n) => n = 1, 2, 4, 8, 16 如果你只有某一塊要特殊的alignement #pragma pack(push, n) ... #pragma pack(pop)
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-14 09:35:23 IP:61.222.xxx.xxx 未訂閱
請問一下: #pragma 這是什麼呢, 我沒有用過,可以說明指導~感謝大家熱情指導!
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-15 00:09:22 IP:61.219.xxx.xxx 未訂閱
引言: 請問一下: #pragma 這是什麼呢, 我沒有用過,可以說明指導~感謝大家熱情指導!
#pragma 是前置指令, 主要目的是用來對compiler下指示用的. 由於各家compiler都有一些特殊的功能, 是因為OS平台, 機器相關等因素不得不作出來支援. 而這些功能基本上有一部份可能是compiler depend or platform/machine depend. 因此呢, 你可以用 #pragma 給 compiler 指示, 要求compiler作出一些特殊的動作. 不過, 特殊 #pragma 得請你自己看你目前用的compiler的手冊/說明文件了. 如果單純是alignment的問題, 那我建議你習慣用 #pack() , 因為這個寫法可以同時適用於 Intel C/C , MSVC, GCC (MinGW/DJGPP/CYGWin), BCB (應該是4 或是 5 以後才有support的樣子)
系統時間:2024-06-29 5:36:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!