|
C Interview Questions and Answers
When should a type cast be used?
There are two situations in which to use a type cast. The first use is
to change the type of an operand to an arithmetic operation so that the
operation will be performed properly.
The second case is to cast pointer types to and from void * in order to
interface with functions that expect or return void pointers. For
example, the following line type casts the return value of the call to
malloc() to be a pointer to a foo structure.
struct foo *p = (struct foo *) malloc(sizeof(struct foo));
What is the difference between a string copy (strcpy) and a memory copy
(memcpy)? When should each be used?
The strcpy() function is designed to work exclusively with strings. It
copies each byte of the source string to the destination string and
stops when the terminating null character () has been moved. On the
other hand, the memcpy() function is designed to work with any type of
data. Because not all data ends with a null character, you must provide
the memcpy() function with the number of bytes you want to copy from the
source to the destination.
How can I convert a string to a number?
The standard C library provides several functions for converting strings
to numbers of all formats (integers, longs, floats, and so on) and vice
versa.
The following functions can be used to convert strings to numbers:
Function Name Purpose
atof() Converts a string to a double-precision floating-point value.
atoi() Converts a string to an integer.
atol() Converts a string to a long integer.
strtod() Converts a string to a double-precision floating-point value
and reports any leftover numbers that could not be converted.
strtol() Converts a string to a long integer and reports any leftover
numbers that could not be converted.
strtoul() Converts a string to an unsigned long integer and reports any
leftover numbers that could not be converted.
How can I convert a number to a string?
The standard C library provides several functions for converting numbers
of all formats (integers, longs, floats, and so on) to strings and vice
versa The following functions can be used to convert integers to
strings:
Function Name Purpose
itoa() Converts an integer value to a string.
ltoa() Converts a long integer value to a string.
ultoa() Converts an unsigned long integer value to a string.
The following functions can be used to convert floating-point values to
strings:
Function Name Purpose
ecvt() Converts a double-precision floating-point value to a string
without an embedded decimal point.
fcvt() Same as ecvt(), but forces the precision to a specified number of
digits.
gcvt() Converts a double-precision floating-point value to a string with
an embedded decimal point.
Is it possible to execute code even after the program exits the main()
function?
The standard C library provides a function named atexit() that can be
used to perform cleanup operations when your program terminates. You can
set up a set of functions you want to perform automatically when your
program exits by passing function pointers to the at exit() function.
What is the stack?
The stack is where all the functions’ local (auto) variables are
created. The stack also contains some information used to call and
return from functions.
A stack trace is a list of which functions have been called, based on
this information. When you start using a debugger, one of the first
things you should learn is how to get a stack trace.
The stack is very inflexible about allocating memory; everything must be
deallocated in exactly the reverse order it was allocated in. For
implementing function calls, that is all that’s needed. Allocating
memory off the stack is extremely efficient. One of the reasons C
compilers generate such good code is their heavy use of a simple stack.
There used to be a C function that any programmer could use for
allocating memory off the stack. The memory was automatically
deallocated when the calling function returned. This was a dangerous
function to call; it’s not available anymore.
How do you print an address?
The safest way is to use printf() (or fprintf() or sprintf()) with the
%P specification. That prints a void pointer (void*). Different
compilers might print a pointer with different formats. Your compiler
will pick a format that’s right for your environment.
If you have some other kind of pointer (not a void*) and you want to be
very safe, cast the pointer to a void*:
printf( %Pn, (void*) buffer );
Can a file other than a .h file be included with #include?
The preprocessor will include whatever file you specify in your #include
statement. Therefore, if you have the line
#include
in your program, the file macros.inc will be included in your
precompiled program. It is, however, unusual programming practice to put
any file that does not have a .h or .hpp extension in an #include
statement.
You should always put a .h extension on any of your C files you are
going to include. This method makes it easier for you and others to
identify which files are being used for preprocessing purposes. For
instance, someone modifying or debugging your program might not know to
look at the macros.inc file for macro definitions. That person might try
in vain by searching all files with .h extensions and come up empty. If
your file had been named macros.h, the search would have included the
macros.h file, and the searcher would have been able to see what macros
you defined in it.
What is Preprocessor?
The preprocessor is used to modify your program according to the
preprocessor directives in your source code. Preprocessor directives
(such as #define) give the preprocessor specific instructions on how to
modify your source code. The preprocessor reads in all of your include
files and the source code you are compiling and creates a preprocessed
version of your source code. This preprocessed version has all of its
macros and constant symbols replaced by their corresponding code and
value assignments. If your source code contains any conditional
preprocessor directives (such as #if), the preprocessor evaluates the
condition and modifies your source code accordingly.
The preprocessor contains many features that are powerful to use, such
as creating macros, performing conditional compilation, inserting
predefined environment variables into your code, and turning compiler
features on and off. For the professional programmer, in-depth knowledge
of the features of the preprocessor can be one of the keys to creating
fast, efficient programs.
How can you restore a redirected standard
stream?
The preceding example showed how you can redirect a standard stream from
within your program. But what if later in your program you wanted to
restore the standard stream to its original state? By using the standard
C library functions named dup() and fdopen(), you can restore a standard
stream such as stdout to its original state.
The dup() function duplicates a file handle. You can use the dup()
function to save the file handle corresponding to the stdout standard
stream. The fdopen() function opens a stream that has been duplicated
with the dup() function.
What is the purpose of realloc( )?
The function realloc(ptr,n) uses two arguments.the first argument ptr is
a pointer to a block of memory for which the size is to be altered. The
second argument n specifies the new size. The size may be increased or
decreased. If n is greater than the old size and if sufficient space is
not available subsequent to the old region, the function realloc( ) may
create a new region and all the old data are moved to the new region.
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.
|