|
Technical Interview Questions
.Net Interview Questions
C++ Interview Questions
Unix Interview Questions
.........More
Download e-Books
C Interview Questions e-book
Aptitude Interview Questions
C/C++ Aptitude Questions
C Aptitude Questions
.........More
Online Quiz
C
Online Quiz
C++
Online Quiz
.........More
Soft Skills
Communication Skills
Leadership Skills
.........More
|
|
C Interview Questions and Answers
printf() Function
What is the output of printf("%d")?
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(...).
malloc()
What is the difference between "calloc(...)" and
"malloc(...)"?
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.
printf() Function- What is the difference between "printf(...)" and
"sprintf(...)"?
sprintf(...) writes data to the character array whereas printf(...)
writes data to the standard output device.
Compilation How to reduce a final size of executable?
Size of the final executable can be reduced using dynamic linking
for libraries.
Linked Lists -- Can you tell me how to check whether a linked list
is circular?
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.
"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);
}
String Processing --- 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);
}
Page Numbers :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Have a Question ?
post your questions here. It
will be answered as soon as possible.
|