Tuesday, May 5, 2009

QUESTION No. 151-160

151) #include <stdio.h>

main()

{

char * str = "hello";

char * ptr = str;

char least = 127;

while (*ptr++)

least = (*ptr<least ) ?*ptr :least;

printf("%d",least);

}

Answer:

0

Explanation:

After 'ptr' reaches the end of the string the value pointed by 'str' is

'\0'. So the value of 'str' is less than that of 'least'. So the value of

'least' finally is 0.


 

152) Declare an array of N pointers to functions returning pointers to functions

returning pointers to characters?

Answer:

(char*(*)( )) (*ptr[N])( );


 

153) main()

{

struct student

{

char name[30];

struct date dob;

}stud;

struct date

{

int day,month,year;

};

scanf("%s%d%d%d", stud.rollno, &student.dob.day,

&student.dob.month, &student.dob.year);

}

Answer:

Compiler Error: Undefined structure date

Explanation:

Inside the struct definition of 'student' the member of type struct

date is given. The compiler doesn't have the definition of date

structure (forward reference is not allowed in C in this case) so it

issues an error.


 

154) main()

{

struct date;

struct student

{

char name[30];

struct date dob;

}stud;

struct date

{

int day,month,year;

};

scanf("%s%d%d%d", stud.rollno, &student.dob.day,

&student.dob.month, &student.dob.year);

}

Answer:

Compiler Error: Undefined structure date

Explanation:

Only declaration of struct date is available inside the structure

definition of 'student' but to have a variable of type struct date the

definition of the structure is required.


 

155) There were 10 records stored in "somefile.dat" but the following program

printed 11 names. What went wrong?

void main()

{

struct student

{

char name[30], rollno[6];

}stud;

FILE *fp = fopen("somefile.dat","r");

while(!feof(fp))

{

fread(&stud, sizeof(stud), 1 , fp);

puts(stud.name);

}

}

Explanation:

fread reads 10 records and prints the names successfully. It

will return EOF only when fread tries to read another record

and fails reading EOF (and returning EOF). So it prints the

last record again. After this only the condition feof(fp)

becomes false, hence comes out of the while loop.

156) Is there any difference between the two declarations,

1. int foo(int *arr[]) and

2. int foo(int *arr[2])

Answer:

No

Explanation:

Functions can only pass pointers and not arrays. The numbers that

are allowed inside the [] is just for more readability. So there is no

difference between the two declarations.


 

157) What is the subtle error in the following code segment?

void fun(int n, int arr[])

{

int *p=0;

int i=0;

while(i++<n)

p = &arr[i];

*p = 0;

}

Answer & Explanation:

If the body of the loop never executes p is assigned no

address. So p remains NULL where *p =0 may result in

problem (may rise to runtime error "NULL pointer

assignment" and terminate the program).

158) What is wrong with the following code?

int *foo()

{

int *s = malloc(sizeof(int)100);

assert(s != NULL);

return s;

}

Answer & Explanation:

assert macro should be used for debugging and finding out bugs.

The check s != NULL is for error/exception handling and for that

assert shouldn't be used. A plain if and the corresponding remedy

statement has to be given.


 

159) What is the hidden bug with the following statement?

assert(val++ != 0);

Answer & Explanation:

Assert macro is used for debugging and removed in release

version. In assert, the experssion involves side-effects. So the

behavior of the code becomes different in case of debug version

and the release version thus leading to a subtle bug.

Rule to Remember:

Don't use expressions that have side-effects in assert statements.


 

160) void main()

{

int *i = 0x400; // i points to the address 400

*i = 0; // set the value of memory location pointed by i;

}

Answer:

Undefined behavior

Explanation:

The second statement results in undefined behavior because it

points to some location whose value may not be available for

modification. This type of pointer in which the non-availability of

the implementation of the referenced location is known as 'incomplete type'.

No comments:

Post a Comment