詢問有關struct的問題 |
答題得分者是:miyu
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
請問各位: 我定義了一個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 發送簡訊給我 |
引言: 請問各位: 我定義了一個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 發送簡訊給我 |
引言: 而我曾試著用 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 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 不好意思~我還有一個問題如下: 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 發送簡訊給我 |
引言: 不好意思~我還有一個問題如下: 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 發送簡訊給我 |
|
miyu
中階會員 發表:13 回覆:96 積分:91 註冊:2003-05-01 發送簡訊給我 |
引言: 請問一下: #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的樣子) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |