j
никогда не инициализируется из-за короткого замыкания из &&
. Поскольку (i=0)
оценивается как ложное, (j=0)
никогда не выполняется и, следовательно, j
получает случайное значение. В первом примере это просто ноль.
Вы должны сказать i=0, j=0
, чтобы достичь того, что вы хотите.
У i++ && j++
та же проблема; это должно быть i++, j++
.
Также это:
char somestring[3] = "abc";
резервирует слишком мало байтов из-за завершающего символа NUL в строке - вам нужно четыре байта. Но если вы не собираетесь изменять строку, вам не нужно указывать количество байтов - вы можете просто сказать это:
char *somestring = "abc";
вместо.