程式這樣寫,會不會太龜毛,還是有比較簡潔的寫法? |
尚未結案
|
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
請問各位前輩,程式這樣寫,會不會太龜毛,還是有比較簡潔的寫法?
//--------------------------------------------------------------------------- void _CMember::SetMemberInfo(__int16 UserID,__int8 *UserName,__int8 *NickName) { vu8UserName = new __int8(64); vu8NickName = new __int8(24); int len = strlen(UserName); len = (len>63)?63:len; strncpy(vu8UserName,UserName,len); vu8UserName[len] ='\0'; len = strlen(NickName); len = (len>23)?23:len; strncpy(vu8NickName,NickName,len); vu8NickName[len] ='\0'; vu16UserID = UserID; bHaveSetInfo = true; } //---------------------------------------------------------------------------發表人 - scott777 於 2004/01/08 17:13:46 發表人 - scott777 於 2004/01/08 19:49:44 |
海星
高階會員 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
|
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
|
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
|
海星
高階會員 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
引言: 這段程式是我自己寫的,其實也不是為了故佈疑陣 只是為了防止buffer發生溢位,只是我覺得這樣 寫有點囉唆,不知道有沒有更好更簡潔的程式碼 然後達到同樣的作用?喔..我還以為你是在哪看到這一段程式碼在詢問.. 變數單位這樣似乎怪怪的.. 你那個是字串,幹嘛不直接使用 char *buffer就好? __int8 根本不是 char 而是 int, 用 strlen() 好像結果不會正確吧?? 而且你是在用 BCB,那更不用這麼麻煩..就直接用 AnsiSting 這樣就好了.. 幫你把程式碼修改一下: 在 class { String vu8UserName, vu8NickName; }; void _CMember::SetMemberInfo( int UserID,String UserName, String NickName) { vu8UserName = UserName; vu8NickName = NickName; } 這樣就完成你的任務了.. 另外你的程式碼有錯誤, strlen 應該在第一行才對.. 取得字串長度後,直接配所需的記憶體即可, 而不是先分配記憶體的大小,再看分配的記憶體是不是太小了. |
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
|
海星
高階會員 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
引言: 很感謝你的回答,用__int8是為了跟其他程式的型態保持一致,所以才這麼做 還有就是strlen是正確的,其實__int8跟char是一樣的都是1個byte,所以沒差別 不用AnsiString是因為方便以後平台的移植,用string或許是比較好的做法 但是因為有欄位大小的限制,所以一開始就定死了...這應該是一個缺點如果你考慮的是什麼跨平台的問題..那太好解決了.. 請在程式碼(??.h)最上方加上這一行(給你一個功課: 下面這一行該如何改進? 因為多檔重複include同樣的h檔會有重複定義問題發生,請自己找答案解決) #define MYUNIT char 然後你的程式碼把 __int8 全部改為 MYUNIT 這個關鍵字 例如: void _CMember::SetMemberInfo(__int16 UserID,MYUNIT *UserName,MYUNIT *NickName); 以後你到了別的平台,就只需修改 #define MYUNIT 這一行就好了. ============================================ 另外你擔心的問題,是不會發生的,char到那個平台都代表 1 byte. 只有 int 這個單位才會隨著系統的位元單位而變更..請安心使用吧!! |
scott777
一般會員 發表:10 回覆:15 積分:5 註冊:2002-08-26 發送簡訊給我 |
引言: 如果你考慮的是什麼跨平台的問題..那太好解決了.. 請在程式碼(??.h)最上方加上這一行(給你一個功課: 下面這一行該如何改進? 因為多檔重複include同樣的h檔會有重複定義問題發生,請自己找答案解決) #define MYUNIT char #ifndef MY_CHECK #define MY_CECHK #define MYUNIT char #endifRight? 呵呵 我指的跨平台問題其實是使用AnsiString的問題 我寫class的時候盡量不要用到跟平台有關的物件 盡量使用stl去解決 感謝你!!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |