Interview Questions

C Back

main()
{
char not;
not=!2;
printf("%d",not);
}

Ans: 

0

! is a logical operator. In C the value 0 is considered to be the boolean value FALSE, and any non-zero value is considered to be the boolean value TRUE. Here 2 is a non-zero value so TRUE. !TRUE is FALSE (0) so it prints 0..

main()
{
char *str1="abcd";
char str2[]="abcd";
printf("%d %d %d",sizeof(str1),sizeof(str2),sizeof("abcd"));
}

Ans: 

2 5 5

In first sizeof, str1 is a character pointer so it gives you the size of the pointer variable. In second sizeof the name str2 indicates the name of the array whose size is 5 (including the '\0' termination character). The third sizeof is similar to the second one.

main() {
char *cptr,c;
void *vptr,v;
c=10;
v=0;
cptr=&c;
vptr=&v;
printf("%c%v",c,v);
}
 

Ans: 

Compiler error (at line number 4): size of v is Unknown.

You can create a variable of type void * but not of type void, since void is an empty type. In the second line you are creating variable vptr of type void * and v of type void hence an error.

main()
{
main();
}

Ans: 

Runtime error: Stack overflow.

main function calls itself again and again. Each time the function is called its return address is stored in the call stack. Since there is no condition to terminate the function call, the call stack overflows at runtime. So it terminates the program and results in an error.

main() {
char name[10],
s[12];
scanf(" \"%[^\"]\"",s);
}
How scanf will execute?

Ans: 

First it checks for the leading white space and discards it.Then it matches with a quotation mark and then it reads all character upto another quotation mark.

what will be the position of the file marker? a: fseek(ptr,0,SEEK_SET); b: fseek(ptr,0,SEEK_CUR);

Ans: 

a: The SEEK_SET sets the file position marker to the starting of the file. b: The SEEK_CUR sets the file position marker to the current position of the file.

main()
{
int i=-1; +i;
printf("i = %d, +i = %d \n",i,+i);
}

Ans: 

i = -1, +i = -1.

Unary + is the only dummy operator in C. Where-ever it comes you can just ignore it just because it has no effect in the expressions (hence the name dummy operator.

int i,j;
for(i=0;i<=10;i++)
{
j+=5;
assert(i<5);
}

Ans: 

Runtime error: Abnormal program termination. assert failed (i<5).

Asserts are used during debugging to make sure that certain conditions are satisfied. If assertion fails, the program will terminate reporting the same. After debugging use,#undef NDEBUG and this will disable all the assertions from the source code. Assertion is a good debugging tool to make use of..

main( )
{
int a[ ] = {10,20,30,40,50},j,*p;
for(j=0; j<5; j++)
{
printf(“%d” ,*a); a++; } p = a; for(j=0; j<5; j++)
{
printf(“%d ” ,*p); p++;
}
}

Ans: 

Compiler error: lvalue required.

Error is in line with statement a++. The operand must be an lvalue and may be of any of scalar type for the any operator, array name only when subscripted is an lvalue. Simply array name is a non-modifiable lvalue..

main()
{
printf("%d", out);
}
int out=100;

Ans: 

100

The rule is that a variable is available for use from the point of declaration. Even though a is a global variable, it is not available for main. Hence an error.

Pages