×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Create a Program to Implement Buffer Overflows in C++ Assignment Solution

July 15, 2024
Harry F. Grimmett
Harry F.
🇨🇦 Canada
C++
Harry F. Grimmett, with a master’s in computer science from the University of Kent, is a C++ homework helper, boasting six years of field experience.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Use well-structured shaders to optimize rendering and ensure efficient resource management. Start with simple shapes, gradually adding complexity, and debug in small steps to identify errors easily.
News
An open-source framework that allows developers to create rich Python applications in the browser using HTML's interface, bridging the gap between web development and Python scripting.

Instructions

Objective

Write a C++ assignment program to implement buffer overflows.

Requirements and Specifications

program to implement buffer overflows in C++

Source Code

#include #include using namespace std; const int MAX_MEAL = 100; const int MAX_NAME_LEN = 20; // Holds a customer data and the next customer after it (Linked list) struct Customer { char name[MAX_NAME_LEN]; int numOrders; Customer *next; // Initialize a customer Customer() { numOrders = 0; next = NULL; } }; // Make sure to read a positive int that doesn't overflow // Since this is a simple application, we shouldn't retrieve an input // that is more than 100 or below 0. This we we protect the app // from under or overflow int readNumOrders() { while (1) { cout << "Enter the number of meals to order for next customer: "; int value; // Make sure it's within bounds. When the user enters a very very very // large number, it will overflow and it will wrap around but we only // accept values that is within 1 to 100 to make the app still work // as expected if (cin >> value) { cin.clear(); cin.ignore(); if (value >= 1 && value <= MAX_MEAL) return value; } else { cin.clear(); cin.ignore(); } cout << "Invalid value." << endl; } } // Read a name making sure that the number of characters is within the buffer // bounds. If an overflow is to happen, we will reject all other incoming characters void readName(char *name) { cout << "Enter customer's name: "; int i; bool overflowed = true; for (i = 0; i < MAX_NAME_LEN - 1; i++) { char c = fgetc(stdin); if (c == '\n') { overflowed = false; break; } name[i] = c; } name[i] = '\0'; if (overflowed) { // Delete all other incoming characters until we get the new line char c; while ((c = fgetc(stdin)) != '\n'); } } // Entry point of the program int main() { Customer *lastCustomer = NULL; // Start with 100 meals prepared int mealsLeft = MAX_MEAL; // As long as there are meals still available, hey will take an order for a // customer while (mealsLeft > 0) { cout << "There are " << mealsLeft << " orders left..." << endl; Customer *customer = new Customer(); customer->numOrders = readNumOrders(); readName(customer->name); if (customer->numOrders <= 0 || customer->numOrders > mealsLeft) { // If the number of meals ordered exceeds the number of meals still // available, decline the order. cout << "Invalid number of orders." << endl; delete customer; } else { // Otherwise, accept the order and reduce the number of meals remaining. mealsLeft -= customer->numOrders; customer->next = lastCustomer; lastCustomer = customer; } } // After all meals are sold, print a recap that shows each customer name and the number of // meals they ordered. cout << endl; cout << "Orders from latest to oldest:" << endl; while (lastCustomer != NULL) { cout << lastCustomer->name << ": " << lastCustomer->numOrders << endl; Customer *nextCustomer = lastCustomer->next; delete lastCustomer; lastCustomer = nextCustomer; } return 0; }

Related Samples

Explore our C++ programming homework samples to see how we tackle complex assignments with clarity and precision. Our curated examples demonstrate expertise in algorithms, data structures, object-oriented concepts, and more. Trust ProgrammingHomeworkHelp.com for top-notch solutions tailored to your academic needs.