C和C 資料型別未對齊

2021-06-16 01:32:34 字數 530 閱讀 4038

自己定義了乙個結構,寫了乙個dll返回這個結構的資料,結果一直出現錯誤,後來把vs2005的所有異常開啟,報出了data misalignment的錯誤,查了查對我也沒什麼幫助。只是猜想記憶體對齊的問題。

但我的結構的定義是3個指標,那就是3個機器字,這樣來看是沒問題的,不存在記憶體為對齊。

後來寫程式試驗,看著每一條語句修改的記憶體資料的區域,發現win32中的com中,bstr使用了sysstringbytelen和sysstringlen來計算字串長度,而我也是通過這個來malloc資料,所以可能是計算的位元組數有問題。導致資料覆蓋,結果修改後不在報錯。

總結:win32提供了_tcslen來計算字串的長度,實際不管是否使用unicode,返回的都是字串的字元長度,即對於unicode,l"ab你好"返回的是4,就是4個字元。

sysstringbytelen返回的是乙個字串的位元組數,引數是bstr,(bstr開始2個位元組儲存著字串長度),l"ab你好"  返回的是字串中字元占用的位元組數,即8個位元組

sysstringlen返回的和_tcslen一樣。

C 和C 資料型別

api與c 的資料型別對應關係表 api資料型別 型別描述 c 型別 api資料型別 型別描述 c 型別 word 16位無符號整數 ushort char 字元char long 32位無符號整數 intdwordlong 64位長整數 long dword 32位無符號整數 uint hdc裝置...

C資料型別對齊規則包含位域

c資料型別對齊規則包含位域 pragma pack n 設定為n位元組對齊 pragma pack push 儲存當前的對齊位元組數 pragma pack pop 還原預設對齊位元組數 vc預設8位元組對齊 1.對於結構體的各個成員,第乙個成員位於偏移為0的位置 2.對於結構體的以後的每個成員的開...

SQL和C 資料型別

資料型別俗稱資料庫的核心所在,在資料庫和其他編輯軟體都是必不可少的。而我們在開發的過程中,在設定資料的時候,經常會碰到資料型別的選擇,都需要正確選擇資料型別。不同資料資訊存放在資料庫中,都要設定不同的資料型別。而資料型別相當於不同大小的容器,可以裝載很多資料。資料型別卻有能分很多種,現在所學的一種在...