I'm currently stuck on this problem.
I have thefollowing code:
int v[10] = {-1, 1000, 2};
int a;
a = strlen((char *)v+1);
printf("strlen result for (char *) v+1: %d\n", a);
I cannot undestand why the final result is always 5 on a little endian "machine". According to strlen documentation, the char * cast in this situation should return 4.
I tried also in online compiler and other machines but the result remains the same. What am I missing ?
You should not use
strlenon anintarray. The function's name already suggested it should only be used on legally formed C strings.That being said, for the reason of studying, array
v's memory layout looks something like this on a little-endian machine:Since you are calling
strlen((char *)v + 1), the computation starts at the location I marked with^. There're 5 non-zero elements (ff, ff, ff, e8, 03), so the result is 5, not 4. Remember 1000 == 0x3e8.