Wednesday, July 4, 2018

C Questions And Answers – 2018A4

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 can I find the day of the week of a given date?

 

Ans:

The following code snippet shows how to get the day of week from the given date.

 

dayofweek ( int yy, int mm, int dd )

{

/*Monday =

1

and Sunday =

0

*/

/* month number >= 1 and <= 12, yy > 1752 or so */

static int arr[ ] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 } ;

yy = yy - mm < 3 ;

return ( yy + yy / 4 - yy / 100 + yy / 400 + arr[ mm - 1] + dd ) % 7 ;

}

void main( )

{

printf ( "\n\n\nDay of week : %d ", dayofweek ( 2002, 5, 18 ) ) ;

}

 

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

 

What's the difference between these two declarations?

 

struct str1 { ... } ;

typedef struct { ... } str2 ;

 

Ans :

The first form declares a structure tag whereas the second declares a typedef. The main difference is that the second declaration is of a slightly more abstract type -- its users don't necessarily know that it is a structure, and the keyword struct is not used when declaring instances of it.

 

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

 

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