Tuesday, July 24, 2018

C Questions And Answers – 2018A24

There are many commonly asked questions regarding C programming language. Below are some collected such question-answer examples. The questions are usually related with Turbo C IDE in windows or GCC under Linux environment [not always].

For more such examples, click C_Q&A label.

 

-------------------------------------------------------------------------------------------------

 

How to obtain a path of the given file?

 

Ans:

The function searchpath( ) searches for the specified file in the subdirectories of the current path.

 

Following program shows how to make use of the searchpath( ) function.

 

#include "dir.h"

 

void main ( int argc, char *argv[] )

{

char *

path ;

if ( path = searchpath ( argv[ 1 ] ) )

printf ( "Pathname : %s\n", path ) ;

else

printf ( "File not found\n" ) ;

}

 

-------------------------------------------------------------------------------------------------

 

Can we get the process identification number of the current program?

 

Ans:

Yes! The macro getpid( ) gives us the process identification number of the program currently running. The process id. uniquely identifies a program. Under DOS, the getpid( ) returns the Program Segment Prefix as the process id.

 

Following program illustrates the use of this macro.

 

#include <stdio.h>

#include <process.h>

 

void main( )

{

printf ( "The process identification number of this program is %X\n",

getpid( ) ) ;

}

 

-------------------------------------------------------------------------------------------------

 

How do I write a function that takes variable number of arguments?

 

Ans:

The following program demonstrates this.

 

#include <stdio.h>

#include <stdarg.h>

 

void main( )

{

int I = 10 ;

float f = 2.5 ;

char *str = "Hello!" ;

vfpf ( "%d %f %s\n", i, f, str ) ;

vfpf ( "%s %s", str, "Hi!" ) ;

}

 

void vfpf ( char *fmt, ... )

{

va_list argptr ;

va_start ( argptr, fmt ) ;

vfprintf ( stdout, fmt, argptr ) ;

va_end ( argptr ) ;

}

 

Here, the function vfpf( ) has called vfprintf( ) that take variable argument lists. va_list is an array that holds information required for the macros va_start and va_end. The macros va_start and va_end provide a portable way to access the variable argument lists. va_start would set up a pointer argptr to point to the first of the variable arguments being passed to the function. The macro va_end helps the called function to perform a normal return.

 

-------------------------------------------------------------------------------------------------

 

Can we change the system date to some other date?

 

Ans:

Yes, We can! The function stime( ) sets the system date to the specified date. It also sets the system time. The time and date is measured in seconds from the 00:00:00 GMT, January 1, 1970.

 

The following program shows how to use this function.

 

#include <stdio.h>

#include <time.h>

void main( )

{

time_t tm ;

int d ;

tm = time ( NULL ) ;

printf ( "The System Date : %s", ctime ( &tm ) ) ;

printf ( "\nHow many days ahead you want to set the date : " ) ;

scanf ( "%d", &d ) ;

tm += ( 24L * d ) * 60L * 60L ;

stime ( &tm ) ;

printf ( "\nNow the new date is : %s", ctime ( &tm ) ) ;

}

 

In this program we have used function ctime( ) in addition to function stime( ). The ctime( ) function converts time value to a 26-character long string that contains date and time.

 

-------------------------------------------------------------------------------------------------

 

How to use function strdup( ) in a program?

 

Ans:

The string function strdup( ) copies the given string to a new location. The function uses

malloc( ) function to allocate space required for the duplicated string. It takes one argument a pointer to the string to be duplicated. The total number of characters present in the given string plus one bytes get allocated for the new string. As this function uses malloc( ) to allocate memory, it is the programmer’s responsibility to deallocate the memory using free( ).

 

#include <stdio.h>

#include <string.h>

#include <alloc.h>

 

void main( )

{

char * str1, *str2 ="double";

str1 = strdup ( str2 ) ;

printf ( "%s\n", str1 ) ;

free ( str1 ) ;

}

 

-------------------------------------------------------------------------------------------------

 

On including a file twice I get errors reporting redefinition of function.

How can I avoid duplicate inclusion?

 

Ans:

Redefinition errors can be avoided by using the following macro definition. Include this definition in the header file.

 

#if !defined filename_h

#define filename_h

/* function definitions */

#endif

 

Replace filename_h with the actual header file name. For example, if name of file to be included is 'goto.h' then replace filename_h with 'goto_h'.

 

-------------------------------------------------------------------------------------------------

 

How to write a swap( ) function which swaps the values of the variables using bitwise operators.

 

Ans:

Here is the swap( ) function.

 

swap ( int *x, int *y )

{

*x ^= *y ;

*y ^= *x ;

*x ^= *y ;

}

 

The swap( ) function uses the bitwise XOR operator and does not require any temporary variable for swapping.

 

-------------------------------------------------------------------------------------------------

 

…till next post, bye-bye & take care.

No comments:

Post a Comment