Thursday, July 5, 2018

C Questions And Answers – 2018A5

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 do I print the contents of environment variables?

 

Ans:

The following program shows how to achieve this:

 

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

{

int i = 0 ;

clrscr( ) ;

while ( env[ i ] )

printf ( "\n%s", env[ i++ ] ) ;

}

 

main( ) has the third command line argument env, which is an array of pointers to the strings.

 

Each pointer points to an environment variable from the list of environment variables.

 

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

 

What would the second and the third printf( ) output the following program?

 

main( )

{

char *str[ ] = {

"Good Morning"

"Good Evening"

"Good Afternoon"

} ;

printf ( "\nFirst string = %s", str[0] ) ;

printf ( "\nSecond string = %s", str[1] ) ;

printf ( "\nThird string = %s", str[2] ) ;

}

 

Ans:

For the above given program, we expect the output as Good Evening and Good Afternoon, for the second and third printf( ). However, the output would be as shown below.

 

First string = Good MorningGood EveningGood Afternoon

Second string = ( null )

Third string =

 

What is missing in the above given code snippet is a comma separator which should separate the strings Good Morning, Good Evening and Good Afternoon. On adding comma, we would get the output as shown below.

 

First string = Good Morning

Second string = Good Evening

Third string = Good Afternoon

 

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

 

The Spawnl( ) function...

 

DOS is a single tasking operating system, thus only one program runs at a time. The

Spawnl( ) function provides us with the capability of starting the execution of one program

from within another program. The first program is called the parent process and the second program that gets called from within the first program is called a child process. Once the second program starts execution, the first is put on hold until the second program completes execution. The first program is then restarted. The following program demonstrates use of spawnl( ) function.

 

/* Mult.c */

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

{

int a[3], i, ret ;

if ( argc < 3 || argc > 3 )

{

printf ( "Too many or Too few arguments..." ) ;

exit ( 0 ) ;

}

for ( i = 1 ; i < argc ; i++ )

a[i] = atoi ( argv[i] ) ;

ret = a[1] * a[2] ;

return ret ;

}

 

/* Spawn.c */

#include <process.h>

#include <stdio.h>

main( )

{

int val ;

val = spawnl ( P_WAIT, "C:\\Mult.exe", "3", "10", "20", NULL ) ;

printf ( "\nReturned value is: %d", val ) ;

}

 

Here, there are two programs. The program 'Mult.exe' works as a child process whereas

'Spawn.exe' works as a parent process. On execution of 'Spawn.exe' it invokes 'Mult.exe' and passes the command-line arguments to it. 'Mult.exe' in turn on execution, calculates the product of 10 and 20 and returns the value to val in 'Spawn.exe'. In our call to spawnl( ) function, we have passed 6 parameters, P_WAIT as the mode of execution, path of '.exe' file to run as childprocess, total number of arguments to be passed to the child process, list of command line arguments and NULL. P_WAIT will cause our application to freeze execution until the child process has completed its execution. This parameter needs to be passed as the default parameter if you are working under DOS. under other operating systems that support multitasking, this parameter can be P_NOWAIT or P_OVERLAY. P_NOWAIT will cause the parent process to execute along with the child process; P_OVERLAY will load the child process on top of the parent process in the memory.

 

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

 

Are the following two statements identical?

 

char str[6] = "Kicit" ;

char *str = "Kicit" ;

 

Ans:

No! Arrays are not pointers. An array is a single, pre-allocated chunk of contiguous elements (all of the same type), fixed in size and location. A pointer on the other hand, is a reference to any data element (of a particular type) located anywhere. A pointer must be

assigned to point to space allocated elsewhere, but it can be reassigned any time. The array declaration char str[6] ; requests that space for 6 characters be set aside, to be known by name str. In other words there is a location named str at which six characters are stored.

 

The pointer declaration char *str ; on the other hand, requests a place that holds a pointer, to be known by the name str. This pointer can point almost anywhere to any char, to any

contiguous array of chars, or nowhere.

 

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

 

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

No comments:

Post a Comment