[問題] sizeof()與int變數做比較

看板C_and_CPP作者時間15年前 (2011/01/21 19:12), 編輯推噓3(307)
留言10則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) N 問題(Question): 程式中有一段敘述大致上是這樣: char Buf[1024]; int Inx; for(Inx=0x000; Inx<sizeof(Buf); Inx=Inx+1) { ... } compiler不太喜歡它,所以說了: warning: comparison between signed and unsigned integer expressions 它說的signed integer應該是指Inx,所以我想sizeof()的回傳值是unsigned integer 型態,下面新手十戒有提到不同資料型態的兩個值不該被拿來比較、賦值,請問在這 狀況中,如果我想轉型成相同的型態: for(Inx=0x000; Inx<(int)sizeof(Buf); Inx=Inx+1) 或 for(Inx=0x000; (unsigned int)Inx<sizeof(Buf); Inx=Inx+1) 哪個是比較好的選擇呢?或是還有其他更好的做法嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 沒有了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.181.135

01/21 19:17, , 1F
(unsigned int)Inx 這個做法一定死很慘
01/21 19:17, 1F

01/21 19:18, , 2F
不過Inx是正的就沒差了sizeof(Buf)一定不會太大
01/21 19:18, 2F

01/21 19:18, , 3F
推樓上 我也認為前一種較好
01/21 19:18, 3F

01/21 19:19, , 4F
可是只是warning而已,不用理他也沒差啦
01/21 19:19, 4F

01/21 19:20, , 5F
選第一種,另外把 < 改成 !=
01/21 19:20, 5F

01/21 19:36, , 6F
最好的方法是 size_t Inx; 型態一樣就沒問題
01/21 19:36, 6F

01/21 19:37, , 7F
記得引入 <cstddef>
01/21 19:37, 7F

01/21 21:03, , 8F
這個要先確定原來的程式到底要幹嘛吧,不同的環境定義的
01/21 21:03, 8F

01/21 21:03, , 9F
資料佔的位元數也不一樣
01/21 21:03, 9F

01/21 21:50, , 10F
推size_t
01/21 21:50, 10F
文章代碼(AID): #1DEMer8t (C_and_CPP)