作者icetofux ()
看板C_and_CPP
標題[問題] sizeof()與int變數做比較
時間Fri Jan 21 19:12:50 2011
開發平台(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
→ stupid0319:(unsigned int)Inx 這個做法一定死很慘 01/21 19:17
→ stupid0319:不過Inx是正的就沒差了sizeof(Buf)一定不會太大 01/21 19:18
推 LPH66:推樓上 我也認為前一種較好 01/21 19:18
→ stupid0319:可是只是warning而已,不用理他也沒差啦 01/21 19:19
推 tropical72:選第一種,另外把 < 改成 != 01/21 19:20
推 loveme00835:最好的方法是 size_t Inx; 型態一樣就沒問題 01/21 19:36
→ loveme00835:記得引入 <cstddef> 01/21 19:37
→ cobrasgo:這個要先確定原來的程式到底要幹嘛吧,不同的環境定義的 01/21 21:03
→ cobrasgo:資料佔的位元數也不一樣 01/21 21:03
→ james732:推size_t 01/21 21:50