Error Handling in C Program:
There is no direct support for Error Handling in C language. However, using the return statement in a function, there are few methods and variables defined in error.h header file that can be used to point out the error. A programmer has to prevent errors in the first place before testing return values from the functions. In C, the function return NULL or -1 value in case of any error. There is a global variable errno which sets the error code/number. Hence, while programming the return value can be used to check error.
What is errno?
When a function is called in C, a variable named errno is automatically assigned a code (value) which can be used to identify the type of error that has been encountered. It is a global variable indicating the error occurred during any function call and defined in the header file errno.h.
List of few different errno values and its corresponding meaning:
Example:
#include <stdio.h> #include <errno.h> int main () { FILE *fp; fp = fopen ("File.txt", "r"); printf (" Value of errno: %d\n ", errno); return 0; }
Output:
Functions used to display a text message associated with errorno
perror(): It returns the string you pass to it, followed by a colon, a space, and then the textual representation of the current errno value.
Syntax: void perror (const char *str) where str is a string containing a message to be printed.
strerror(): It returns a pointer to the textual representation of the current errno value.
Syntax: char *strerror (int errnum) where errnum is the error number.
Example
#include <stdio.h> #include <errno.h> #include <string.h> int main () { FILE *fp; fp = fopen (" File.txt ", "r"); printf ("Value of errno: %d\n", errno); printf ("The error message is : %s\n", strerror (errno)); perror ("Message from perror"); return 0; }
Output:
Divide by Zero Error in C Program
Sometimes at the time of dividing any number, programmers do not check if a divisor is zero and finally it creates a runtime error. Because C Language cannot do anything about it. All you can do is, avoid it.
Example
#include<stdio.h> #include <stdlib.h> void function (int); int main () { int x = 0; function (x); return 0; } void function (int x) { float fx; if (x == 0) { printf ("Division by Zero is not allowed \n"); fprintf (stderr, "Division by zero! Exiting...\n"); exit (EXIT_FAILURE); } else { fx = 10 / x; printf ("f(x) is: %.5f", fx); } }
Output:
Exit Status
The Exit Status constants are used in the exit() function to inform the calling function about the error. EXIT_SUCCESS and EXIT_FAILURE are the two constant values available for use. These are macros defined in stdlib.h which indicates successful or unsuccessful termination, respectively.
Example
#include <stdio.h> #include <errno.h> #include <string.h> #include <stdlib.h> int main () { FILE *fp; fp = fopen ("filedoesnotexist.txt", "rb"); if (fp == NULL) { printf ("Value of errno: %d\n", errno); printf ("Error opening the file: %s\n", strerror (errno)); perror ("Error printed by perror"); exit (EXIT_FAILURE); printf ("I will not be printed\n"); } else { fclose (fp); exit (EXIT_SUCCESS); printf ("I will not be printed\n"); } return 0; }
Output: