Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Handling Standard Library Errors | Handling Runtime and System Errors
C Defensive Programming and Error Handling

bookHandling Standard Library Errors

Standard library functions in C use specific return values to indicate errors. Many functions return a NULL pointer, EOF, or other special values when an operation fails. You must always check these return values before using the result, as failing to do so can lead to undefined behavior or crashes. For example, when opening a file with fopen, the function returns NULL if it cannot open the file. Similarly, functions that read input may return EOF to signal the end of input or an error. Defensive programming requires you to handle these return values safely and appropriately.

main.c

main.c

copy
123456789101112131415161718
#include <stdio.h> int main() { const char *filename = "nonexistent_file.txt"; FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Error: Could not open file '%s'.\n", filename); // Handle the error, e.g., exit or try a different file return 1; } // If fopen succeeded, proceed with file operations printf("File opened successfully.\n"); fclose(file); return 0; }

When you use scanf to read input, it returns the number of input items that were successfully matched and assigned. If the input does not match the expected format, scanf may return a value less than the number of items you requested, or even 0 if nothing valid was read. Always check the return value of scanf to detect invalid or unexpected input. This allows you to handle errors safely, such as prompting the user again or taking corrective action, rather than relying on potentially incorrect data.

main.c

main.c

copy
12345678910111213141516
#include <stdio.h> int main() { int age; printf("Enter your age: "); int result = scanf("%d", &age); if (result != 1) { printf("Invalid input. Please enter a valid integer.\n"); // Handle the error, e.g., prompt again or exit return 1; } printf("You entered: %d\n", age); return 0; }

Functions such as malloc() also return NULL when they cannot allocate the requested memory. You must always verify that the returned pointer is not NULL before using it. Failing to check can lead to undefined behavior, including crashes or data corruption, if you attempt to access memory that was never allocated.

main.c

main.c

copy
123456789101112131415161718192021222324
#include <stdio.h> #include <stdlib.h> int main() { int *numbers = (int *)malloc(5 * sizeof(int)); if (numbers == NULL) { printf("Error: Memory allocation failed.\n"); // Handle the error, e.g., exit or try to free up memory return 1; } // If malloc succeeded, proceed with using the memory printf("Memory allocated successfully.\n"); // Example usage: initialize and print values for (int i = 0; i < 5; i++) { numbers[i] = i * 2; printf("numbers[%d] = %d\n", i, numbers[i]); } free(numbers); return 0; }
Note
Note

Always verify the return values of standard library functions such as fopen, scanf, and malloc. Ignoring them can lead to crashes, corrupted data, or undefined behavior. Checking these values is a simple yet powerful defensive programming habit that makes your C programs safer and more reliable.

question mark

What does fopen return if it fails to open a file?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 2

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

Awesome!

Completion rate improved to 12.5

bookHandling Standard Library Errors

Swipe to show menu

Standard library functions in C use specific return values to indicate errors. Many functions return a NULL pointer, EOF, or other special values when an operation fails. You must always check these return values before using the result, as failing to do so can lead to undefined behavior or crashes. For example, when opening a file with fopen, the function returns NULL if it cannot open the file. Similarly, functions that read input may return EOF to signal the end of input or an error. Defensive programming requires you to handle these return values safely and appropriately.

main.c

main.c

copy
123456789101112131415161718
#include <stdio.h> int main() { const char *filename = "nonexistent_file.txt"; FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Error: Could not open file '%s'.\n", filename); // Handle the error, e.g., exit or try a different file return 1; } // If fopen succeeded, proceed with file operations printf("File opened successfully.\n"); fclose(file); return 0; }

When you use scanf to read input, it returns the number of input items that were successfully matched and assigned. If the input does not match the expected format, scanf may return a value less than the number of items you requested, or even 0 if nothing valid was read. Always check the return value of scanf to detect invalid or unexpected input. This allows you to handle errors safely, such as prompting the user again or taking corrective action, rather than relying on potentially incorrect data.

main.c

main.c

copy
12345678910111213141516
#include <stdio.h> int main() { int age; printf("Enter your age: "); int result = scanf("%d", &age); if (result != 1) { printf("Invalid input. Please enter a valid integer.\n"); // Handle the error, e.g., prompt again or exit return 1; } printf("You entered: %d\n", age); return 0; }

Functions such as malloc() also return NULL when they cannot allocate the requested memory. You must always verify that the returned pointer is not NULL before using it. Failing to check can lead to undefined behavior, including crashes or data corruption, if you attempt to access memory that was never allocated.

main.c

main.c

copy
123456789101112131415161718192021222324
#include <stdio.h> #include <stdlib.h> int main() { int *numbers = (int *)malloc(5 * sizeof(int)); if (numbers == NULL) { printf("Error: Memory allocation failed.\n"); // Handle the error, e.g., exit or try to free up memory return 1; } // If malloc succeeded, proceed with using the memory printf("Memory allocated successfully.\n"); // Example usage: initialize and print values for (int i = 0; i < 5; i++) { numbers[i] = i * 2; printf("numbers[%d] = %d\n", i, numbers[i]); } free(numbers); return 0; }
Note
Note

Always verify the return values of standard library functions such as fopen, scanf, and malloc. Ignoring them can lead to crashes, corrupted data, or undefined behavior. Checking these values is a simple yet powerful defensive programming habit that makes your C programs safer and more reliable.

question mark

What does fopen return if it fails to open a file?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 2
some-alt