Here's how I "read" for loops:
Code:
int n;
for (n = 0; n < 100; n++)
   ...
"For n equals 0, while n is less than 100, n plus plus"
The first expression is only executed once, and first: "n = 0".
The middle expression is the loop conditional - while expression is true, keep truck'n
The last expression is executed after every loop and before the middle expression is executed.

So we can rewrite the loop as while loop like so:
Code:
int n = 0;
while (n < 100)
{
   ...
   n++;
}
A conditional expression is C will evaluate to true (non-zero) or false (zero). So if s[j + k] contains a value of 0, then "if (s[j + k])" will evaluate to false.
0 == '\0'

gg