42 votes

Consider the following C program.

#include<stdio.h> #include<string.h> int main() { char* c=”GATECSIT2017”; char* p=c; printf(“%d”, (int)strlen(c+2[p]-6[p]-1)); return 0; }

The output of the program is _______

66 votes

Best answer

char c[]="GATECSIT2017"; char *p=c; printf("%d",strlen(c+2[p]-6[p]-1));

$2[p] = *(2+p) = p[2]$

$6[p] = *(6+p) = p[6]$

$c + 2[p] - 6[p] -1 = c + 'T' - 'I' - 1 = c + 11 - 1 = c + 10$ (In any character coding all alphabet letters are assigned consecutive int values as per C)

printf will print $2$ which is the length of "$17$".

0

sir i believe the question was a numerical answer type and had only one output which was to print just 2,

i remember that there was only one

printf statement which was

printf("%d",(int)strlen(c+2[p]-6[p]-1));

kindly change the question as it can be misleading

0

leave it for now. When the answer response comes, all the questions will be renetered. It should be coming next week.

0

strangely counting position of alphabet number worked out here c is c[0]=g (7th position in alphabet) , similarly T=20th , I is 11th (7+20-11-1) :D , do you think it will work for every case ?

0

If we type cast and value of strlen is negative then what happens ?

ex : strlen(-2); // output 2

(int)strlen(-2); // what is the output ?

0

In the strlen why we are not considering null as last character? It means I want to say that strlen should return length as 3. Please correct me if I am wrong

4

in strlen implementation while loop works till not equal to '\0'. So strlen will return the length of string excluded with null character hence in this case length will be 2.

http://clc-wiki.net/wiki/C_standard_library:string.h:strlen

http://clc-wiki.net/wiki/C_standard_library:string.h:strlen

31 votes

4

Yes @ Rishabh Gupta 2

2[p] Simply means p[2]

Read this : https://stackoverflow.com/questions/5546075/different-way-of-accessing-array-elements-in-c

8 votes

The answer wil be 2.

This was asked , c+2[p]-6[p]-1

Look at 2[c] - 6[p] this will be evaluate as ( T - I)

the difference in ascii walue of T and I will be 11.

So it will boil down to c + 11-1

means c+10 and the address for stringlength will become like strlength("17');

That is 2

This was asked , c+2[p]-6[p]-1

Look at 2[c] - 6[p] this will be evaluate as ( T - I)

the difference in ascii walue of T and I will be 11.

So it will boil down to c + 11-1

means c+10 and the address for stringlength will become like strlength("17');

That is 2

0

@pankajbelwal

(ascii value of c) + 10 (make sure ascii value of 'c' is relative to the value choosen in 't' and 'i' in previous steps )

(ascii value of c) + 10 (make sure ascii value of 'c' is relative to the value choosen in 't' and 'i' in previous steps )

9

Ascii value of C is not used here, C is the starting address of the array and C+10 is the address of the 11th element of the Array, now strlen starts counting from the address passed to it as argument and stops when it finds '\0'(null- by default added at the end of any array of characters- string) but while counting array length strlen does not add extra 1 for this null character, so starting from C+10, strlen finds that C+12 is null('\0), hence stops and returns length as 2

0

in ASCII table all alphabets are listed in consecutive locations, so you can assume a is 1 , then b is 2 , c is 3 , d is 4, e is 5, f is 6, g is 7 .......so on till z=26,

now given in question C +10, where C gives the value of starting address of the array , i,e value of G which is 7

so C+7 turns out to be 17 , i hope this helps

now given in question C +10, where C gives the value of starting address of the array , i,e value of G which is 7

so C+7 turns out to be 17 , i hope this helps

0

@Sourav Basu @Arjun @Shaik Masthan (sorry for disturbing you )

**sir the result is c+10 which **(on considering c = 1000) **gives 1010**.

then shouldn't it be strlen(1010) why are we taking element at that address as dereferencing operator is not used ***(c+10) would give "17"** ...pls tell me where i am getting wrong.