我的代碼這部分工作正常:需要一些幫助理解一個奇怪ç行爲
#include <stdio.h>
int main(){
//char somestring[3] = "abc";
int i, j;
int count = 5;
for((i=0) && (j=0); count > 0; i++ && j++){
printf("i = %d and j = %d\n", i, j);
count--;
}
return 0;
}
預期輸出:
i : 0 and j : 0
i : 1 and j : 1
i : 2 and j : 2
i : 3 and j : 3
i : 4 and j : 4
事情變得奇怪,當我取消對焦炭字符串聲明函數體的第一行。
#include <stdio.h>
int main(){
char somestring[3] = "abc";
...
}
輸出:
i : 0 and j : 4195392
i : 1 and j : 4195393
i : 2 and j : 4195394
i : 3 and j : 4195395
i : 4 and j : 4195396
什麼是這背後的邏輯是什麼?我在Ubuntu 9.10上使用gcc 4.4.1。
怎麼了i = 0 && j = 0?不應該是i = 0,j = 0嗎?類似於i ++ && j ++ – 2010-04-10 20:09:23
字符串'「abc」'需要4個字節,而不是3.一個用於末尾的'\ 0'終止符。讓大小離開數組,並讓編譯器填充它。 – GManNickG 2010-04-10 20:09:41
@GMan:非常好,從未見過那個。 @Mahesh:至於奇怪的語法,我只是想用布爾值來玩一下,因爲我從第一個例子中得到了一些誤判,我沒有注意j未被初始化。謝謝大家。 – 2010-04-10 20:20:29