[問題] char* 比值

看板C_and_CPP (C/C++)作者 (黑駿)時間13年前 (2012/11/04 22:58), 編輯推噓1(108)
留言9則, 5人參與, 最新討論串1/1
我寫了一個小程式 #include <stdio.h> int main() { char* a = (char*)-1; printf("%d\n", (a < (char*) 0)); printf("%d\n", (a <= (char*) -1)); return 0; } 意外得到結果是 0 1 一個變數居然 小於等於 -1 卻 不小於 0 !!! 原本猜測是有些平台上 char 會是 signed 有些是 unsigned 於是把 char 都改成 signed char,結果還是一樣... 因為有些 unistd 的東西 error 時會回傳 -1,所以會需要這樣判斷 這樣做到底問題在哪@@?? 我要怎麼寫才能保證各平台行為一致?(不會是未定義行為) 謝謝 -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.230.123

11/04 22:59, , 1F
你這樣做的用意是什麼?小心爆炸
11/04 22:59, 1F

11/04 23:06, , 2F
http://ppt.cc/DPdA 這是你要的嗎?CHAR_MAX
11/04 23:06, 2F
像是 <sys/shm.h> 裡的 shmat() 當有 error 發生時會回傳 (void*)-1 但我不知道要怎麼判斷比較好@@... ※ 編輯: darkgerm 來自: 140.113.230.123 (11/04 23:15)

11/04 23:21, , 3F
用 == != 判斷就好 不要去管誰大誰小
11/04 23:21, 3F

11/04 23:24, , 4F
喔喔感謝樓上!! 不過是什麼原因所以不能這樣做?
11/04 23:24, 4F

11/04 23:28, , 5F
char*是pointer 基本上是unsigned
11/04 23:28, 5F

11/04 23:29, , 6F
所以(char*) -1其實是0xFFFFFFFF之類的
11/04 23:29, 6F

11/04 23:31, , 7F
你不能保證這些東西比大小會如何 但你可以確定它們一不一樣
11/04 23:31, 7F

11/04 23:32, , 8F
原來如此!! 所以只用 == != 就會沒問題 感謝!
11/04 23:32, 8F

11/05 01:40, , 9F
az大正解..
11/05 01:40, 9F
文章代碼(AID): #1Gbe9uWB (C_and_CPP)
文章代碼(AID): #1Gbe9uWB (C_and_CPP)