下面的代碼片段不能正常工作,在Ubuntu機器上使用GCC進行編譯時,以下程序的輸出爲「S更大」。儘管變量s是-1,並且它明顯小於sizeof(buffer),它是20。但它仍然打印S是Bigger。爲什麼下面的代碼打印出「S更大」,即使s更小?
我只能做的邏輯假設是C將變量「s」轉換爲無符號整數並在「If」條件下使用。 如果我的假設是正確的,爲什麼C這麼做,或者如果我錯了,爲什麼這段代碼給這個混淆輸出。
#include <stdio.h>
int main(void) {
int s = -1;
char buffer[20];
if(s > sizeof(buffer)){
printf("S is Bigger");
}
return 0;
}
'sizeof(buffer)'會給你指針的大小,它是32位機器上的4的大小 –
@MaxB'buffer'是一個不是指針的數組。 –
整數推廣。不要比較已簽名和未簽名。或者施展其中一個。你的編譯器應該警告有關簽名和未簽名的比較。 – wildplasser