Previous | Home | Next |
C Interview Questions And Answers
Q:What is C language?
Ans: The C programming language is a standardized programming language
developed in the early 1970s by Ken Thompson and Dennis Ritchie for use on the
UNIX operating system. It has since spread to many other operating systems,
and is one of the most widely used programming languages.
Q:What is the output of printf("%d")?
ANS:
1. When we write printf("%d",x); this means compiler will print the value of
x. But as here, there is nothing after �%d� so compiler will show in
output window garbage value.
2. When we use %d the compiler internally uses it to access the argument in
the stack (argument stack). Ideally compiler determines the offset of the data
variable depending on the format specification string. Now when we write
printf("%d",a) then compiler first accesses the top most element in the
argument stack of the printf which is %d and depending on the format string it
calculated to offset to the actual data variable in the memory which is to be
printed. Now when only %d will be present in the printf then compiler will
calculate the correct offset (which will be the offset to access the integer
variable) but as the actual data object is to be printed is not present at
that memory location so it will print what ever will be the contents of that
memory location.
3. Some compilers check the format string and will generate an error without
the proper number and type of arguments for things like printf(...) and scanf(...).
Q: What is the difference between "calloc(...)" and "malloc(...)"?
ANS:
1. calloc(...) allocates a block of memory for an array of elements of
a certain size. By default the block is initialized to 0. The total number of
memory allocated will be (number_of_elements * size).
malloc(...) takes in only a single argument which is the memory
required in bytes. malloc(...) allocated bytes of memory and not blocks of
memory like calloc(...).
2. malloc(...) allocates memory blocks and returns a void pointer to
the allocated space, or NULL if there is insufficient memory available.
calloc(...) allocates an array in memory with elements initialized to 0
and returns a pointer to the allocated space. calloc(...) calls
malloc(...) in order to use the C++ _set_new_mode function to set the new
handler mode.
Q: What is the difference between "printf(...)" and "sprintf(...)"?
ANS:sprintf(...) writes data to the character array whereas
printf(...) writes data to the standard output device.
Q: Compilation How to reduce a final size of
executable?
ANS: Size of the final executable can be reduced using dynamic linking
for libraries.
Q:Can you tell me how to check whether a linked list is circular?
ANS:Create two pointers, and set both to the start of the list. Update
each as follows:
while (pointer1) {
pointer1 = pointer1->next;
pointer2 = pointer2->next;
if (pointer2) pointer2=pointer2->next;
if (pointer1 == pointer2) {
print ("circular");
}
}
If a list is circular, at some point pointer2 will wrap around and be either
at the item just before pointer1, or the item before that. Either way, its
either 1 or 2 jumps until they meet.
Q:"union" Data Type What is the output of the following program? Why?
#include
main() {
typedef union {
int a;
char b[10];
float c;
}
Union;
Union x,y = {100};
x.a = 50;
strcpy(x.b,"hello");
x.c = 21.50;
printf("Union x : %d %s %f n",x.a,x.b,x.c);
printf("Union y : %d %s %f n",y.a,y.b,y.c);
}
Q: Write out a function that prints out all the permutations of a string.
For example, abc would give you abc, acb, bac, bca, cab, cba.
void PrintPermu (char *sBegin, char* sRest) {
int iLoop;
char cTmp;
char cFLetter[1];
char *sNewBegin;
char *sCur;
int iLen;
static int iCount;
iLen = strlen(sRest);
if (iLen == 2) {
iCount++;
printf("%d: %s%s\n",iCount,sBegin,sRest);
iCount++;
printf("%d: %s%c%c\n",iCount,sBegin,sRest[1],sRest[0]);
return;
} else if (iLen == 1) {
iCount++;
printf("%d: %s%s\n", iCount, sBegin, sRest);
return;
} else {
// swap the first character of sRest with each of
// the remaining chars recursively call debug print
sCur = (char*)malloc(iLen);
sNewBegin = (char*)malloc(iLen);
for (iLoop = 0; iLoop < iLen; iLoop ++) {
strcpy(sCur, sRest);
strcpy(sNewBegin, sBegin);
cTmp = sCur[iLoop];
sCur[iLoop] = sCur[0];
sCur[0] = cTmp;
sprintf(cFLetter, "%c", sCur[0]);
strcat(sNewBegin, cFLetter);
debugprint(sNewBegin, sCur+1);
}
}
}
void main() {
char s[255];
char sIn[255];
printf("\nEnter a string:");
scanf("%s%*c",sIn);
memset(s,0,255);
PrintPermu(s, sIn);
}
Q:What will print out?
main()
{
char *p1=name;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(%s\n,p2);
}
The pointer p2 value is also increasing with p1 .
*p2++ = *p1++ means copy value of *p1 to *p2 , then increment both addresses
(p1,p2) by one , so that they can point to next address . So when the loop
exits (ie when address p1 reaches next character to name ie null) p2 address
also points to next location to name . When we try to print string with p2
as starting address , it will try to print string from location after name
hence it is null string .
e.g. :
initially p1 = 2000 (address) , p2 = 3000
*p1 has value n ..after 4 increments , loop exits at that time p1 value
will be 2004 , p2 =3004 the actual result is stored in 3000 - n , 3001 - a ,
3002 - m , 3003 -e we r trying to print from 3004 . where no data is
present that's why its printing null .
Answer: empty string.
Previous
Home
Next