Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Debug Assertion Failed (file_name != nullptr)

I'm a beginner, I'm trying out on a Library Management System thingy, and it comes out that error appears (Debug Assertion Failed), and the expression is (file_name != nullptr).

When I'm in the Main Menu, when I select the 1st option, this error came out and so I need help, thanks:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNING

int AddNewBook(librecord);
int Exit();

struct
{
   int id;
   char title;
   char edition;
   int year;
   char location;
   char price;
   int status;
}book;

FILE *librecord;

char book_id;
char book_title;
char book_edition;
char book_year;
char book_location;
char book_price;

char confirmation;
int no_value;

int main(void)
{
   printf("   **         ***          ***     **********   \n");
   printf("   **         ****        ****     **********   \n");
   printf("   **         ** **      ** **     ***          \n");
   printf("   **         **  **    **  **     **********   \n");
   printf("   **         **   **  **   **            ***   \n");
   printf("   *******    **    ****    **     **********   \n");
   printf("   *******    **     **     **     **********   \n");
   printf("\n");
   printf(" Welcome to Library Management System \n");
   printf("\n");
   printf(" MAIN MENU \n");
   printf("\n");
   printf(" 1. Add New Book \n");
   printf(" 2. Edit Book Information \n");
   printf(" 3. Delete Book \n");
   printf(" 4. View Book List \n");
   printf(" 5. Book Check-In \n");
   printf(" 6. Book Check-Out \n");
   printf(" 7. Search \n");
   printf(" 8. Exit \n");

   int choice;
   printf("\n Please enter a number: ");
   scanf_s("%d", &choice);

   switch(choice)
   {
     case 1: 
        system("cls");
        AddNewBook(librecord);
        break;

     case 8: 
        Exit();
     default:
        printf("Wrong Input !!! Please re-enter a number!!! \n");
        system("pause");
        system("cls");
        main();
   }

}

int AddNewBook(FILE *librecord)
{
   librecord = fopen(librecord, "ab+");

   printf("\n");
   printf(" ADD NEW BOOK \n");
   printf("\n");

   printf(" Book ID: ");
   scanf_s(" %d", &book.id);
   fflush(stdin);
   strcpy(book.id, book_id);

   printf("\n Title: ");
   scanf_s(" %s", &book.title);
   fflush(stdin);
   strcpy(book.title, book_title);

   printf("\n Edition: ");
   scanf_s(" %s", &book.edition);
   fflush(stdin);
   strcpy(book.edition, book_edition);

   printf("\n Year of Publication: ");
   scanf_s(" %d", &book.year);
   fflush(stdin);
   strcpy(book.year, book_year);

   printf("\n Shelf Location: ");
   scanf_s(" %s", &book.location);
   fflush(stdin);
   strcpy(book.location, book_location);

   printf("\n Price(RM): ");
   scanf_s(" %s", &book.price);
   fflush(stdin);
   strcpy(book.price, book_price);

   printf("Confirm? (Y/N) \n");
   scanf("%c", &confirmation);
}

int Exit()
{
   exit(0);
}

Debug Assertion Failed!

Program: ...ments\Visual Studio 2015\Projects\Project9\Debug\Project9.exe File: minkernel\crts\ucrt\src\appcrt\stdio\fopen.cpp Line: 30

Expression: file_name != nullptr

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

like image 882
Kenn Kelentrixion Avatar asked Dec 30 '25 06:12

Kenn Kelentrixion


1 Answers

The message tells you that you have passed a NULL filename to fopen. And indeed, librecord is an uninitialised static variable, whose value is NULL initially. (An assertion is a test for programming errors; you are not supposed to pass NULL as filename.)

Initialise librecord with a suitable file name or assign a file name during program execution before you open the file. (And after opening the file, check for success. You cannot rely on your dta base file actually being present and readable.)

like image 90
M Oehm Avatar answered Jan 02 '26 00:01

M Oehm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!