Эта часть моего кода работает отлично:Нужна помощь понимание странного поведения C
#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
Что логика за этим? Я использую gcc 4.4.1 на Ubuntu 9.10.
Что такое i = 0 && j = 0? не должно быть i = 0, j = 0? аналогично для i ++ && j ++ –
Строка '' abc "' занимает 4 байта, а не 3. Один для терминатора '\ 0' в конце. Оставьте размер из массива и дайте компилятору заполнить его. – GManNickG
@GMan: Очень приятно, никогда не видел этого. @Mahesh: Что касается странного синтаксиса, я просто хотел немного проиграть с булевым, и, поскольку у меня появился некоторый фальшивый положительный результат из моего первого примера, я не обращал внимания на то, что j не инициализируется. Спасибо всем. –