It seems that you outputted the expression strlen(s)-strlen(x) using format specifier %u for example like this
printf( "%u\n", ( unsigned int )( strlen(s)-strlen(x)));
printf( "%u\n", c );
In this case the output is indeed is equal to
4294967294
4294967295
However if you output these expressions using casting to the type size_t and the format specifier %zu you will get
printf( "%zu\n", strlen(s)-strlen(x));
printf( "%zu\n", ( size_t ) c );
and 
18446744073709551614
4294967295
So the value of expression strlen(s)-strlen(x) is greater than the value of the variable c casted to the type size_t.
You could get the expected by you result if sizeof( size_t ) would be equal to sizeof( unsigned int ).