0xcd(205)問題

來源:互聯網
上載者:User

昨天調試SLanAgent時碰到一個很奇怪的問題。

SLanServer和SLanAgent都用Debug版運行,取得Agent的各種資料,一直跑得很好。但是用python寫了一個測試程式,
從SLanAgent取得OSInfo,在解析OSVersion和OSMend時一直出錯。SLanAgent是採用utf-8傳輸字串的。
python中取得字串後也使用utf-8解析了,但是python就是報錯,說有些byte無法被decode。

調試SLanAgent之後,發現轉換成utf-8傳輸時,如果傳一個100位元組的數組,但裡面的內容不足100位元組,那麼多餘那些類容會被填充為
0xcd(也就是205),奇怪,從來沒有使用0xcd這個數字啊,字串的結束符不應該是0x0嗎?為什麼無故變成0xcd了呢,這個0xcd又是怎麼
來的呢。

上網查了之後發現,0xcd是被vc的debug版自動加上去的,對於一個分配了空間但是沒有初始化的char數組,在調試版的時候,vc會把所有的位元組初始化為0xcd(cd表示clear data),表示沒被初始化過,這樣放可以防止某些時候報錯。

問題清楚了,解決起來也很容易,在用new分配空間的時候,分配完之後立即用memset對這段空間進行初始化,這下就不再出問題了。

btw:雖然這個0xcd在python下出錯了,但是在SLanServer一直沒出現問題,並且對於以0x25結尾的字元
串,MultiByteToWideChar這個函數也不會把一連串的0xcd當作真正的字元進行解析,這個MultiByteToWideChar也挺
奇怪啊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.