→ hylkevin: 32bit系統若str_A位址大於0x80000000, 強制轉成整數會溢 12/09 01:40
→ hylkevin: 位變負。 12/09 01:40
所以負數減掉一個非常大的負數,才會變成正數這樣嗎?
那如果要實現我的功能,我應該怎麼改才好?
※ 編輯: jacky1989 (111.249.105.253), 12/09/2016 01:48:02
→ CoNsTaR: char* pos = strstr(...); 12/09 02:08
→ CoNsTaR: if (pos == NULL) 12/09 02:08
→ CoNsTaR: return -1; 12/09 02:08
→ CoNsTaR: else 12/09 02:08
→ CoNsTaR: return (ptrdiff_t)(pos - str_A); 12/09 02:08
推 LPH66: 這問題其實是你預設了空指標減去一個指向物件的指標會為負 12/09 02:25
→ LPH66: 但標準裡規定非屬同陣列的指標相減其結果未定義 12/09 02:26
→ LPH66: (即是版標講的未定義行為) 空指標顯然不會指向哪個陣列 12/09 02:29
→ LPH66: 因此無法預期相減會發生什麼事 12/09 02:29
→ EdisonX: int iret = ( pos=strstr(...) ? (pos-str_A) : -1 ) ; 12/10 23:07
推 LPH66: pos=strstr(...) 要括號起來... 12/11 00:14
→ EdisonX: 對 @@ 少一個括號 , 謝謝指正。 12/11 00:32