Most developers don't pass NULL on purpose. It usually happens because of a failed fopen call:
The number of items successfully matched and assigned. Zero: No items matched the format string. Fscanf C Expression Stream Null
Always verify your FILE * pointer immediately after fopen . Defensive programming is the only way to prevent a null stream from breaking your application. Most developers don't pass NULL on purpose
FILE *fptr = fopen("non_existent_file.txt", "r"); // If the file didn't open, fptr is NULL. // The next line will crash the program: fscanf(fptr, "%s", buffer); Use code with caution. Copied to clipboard 3. The "Expression" and Return Value Always verify your FILE * pointer immediately after fopen
#include int main() { FILE *stream = fopen("data.txt", "r"); // 1. Check for NULL before using the stream if (stream == NULL) { perror("Error opening file"); return 1; } char name[50]; int age; // 2. Use the fscanf expression in a loop or condition // This ensures you successfully read both items while (fscanf(stream, "%49s %d", name, &age) == 2) { printf("Read: %s, %d\n", name, age); } fclose(stream); return 0; } Use code with caution. Copied to clipboard 5. Summary Instant crash (Segfault). Stream is Valid but Empty: fscanf returns EOF .