251 views
#include<stdio.h>
#include<string.h>
int main(void) {
char *b="GATECSIT2019";
char *r=a;
char *s=b;
printf("%d",(int)strlen(b+3[r]-1[s]));
return 0;
}


Ans is given $8.$ I know basic thing, but couldnot getting what strlen(b+3[r]-1[s]) returning?? Plz explain.

| 251 views

strlen(b+3[r]-1[s]) :

first: 3[r] is same as r i.e., 'E'

and 1[s] is same as s i.e., 'A'

3[r] - 1[s] = 'E' - 'A' = 4

now, b + 4 refers to  4 th index in b i.e, 'C' (starting position)

strlen(b+4) = strlen("CSIT2019") = 8

Thus, it will return 8.

correct me if i am wrong.

selected by
0
But Arithmetic operator is Left to right associativity.

so why you evaluate the right first ?
0
yes, but it won't differ.
0
b+3[r]-1[s]=b+*(r+3)-*(s+1)

=b+E-A

=b+ 69 -65

=b+4

=  strlen(b+4)

=strlen(CSIT2019)

=8   { ASCII of A=65 &E=69}
b+3[r]-1[s]=b+*(r+3)-*(s+1)

=b+E-A      {ASCII OF A=65 &E=69}

=b+ 69 -65

=b+4

=  strlen(b+4)

=strlen(CSIT2019)

b+3[r]-1[s]=b+*(r+3)-*(s+1)    (r=*(r+3)=*(3+r)=3[r])

=b+E-A      {ASCII OF A=65 &E=69}

=b+ 69 -65

=b+4 (here b points to C right now)

=  strlen(b+4)

=strlen(CSIT2019) (strlen never count \0')