Пример:
int i = 0;
for(; i < strlen(source); i++)
{
result[i] = source[i];
}
for(; i < size; i++)
{
result[i] = buf[i - strlen(source)];
}
В данном случае компилятор видимо должен просто ориентироваться на последнее указанное до начала цикла значение i - для первого цикла это=
int i = 0;
а для второго , то значение i, которое получится в результате "накрутки" в первом цикле.