Я чувствую полузадерживаемое сообщение, но я не знаю, почему моя программа взрывается, когда она читает строковый литерал с клавиатуры (т. Е. Присваивая его указателю).Ошибка при чтении строкового литерала в указатель
Отладка более часа, и программа продолжает взрываться, когда она читается с клавиатуры.
Я пробовал все, чтобы исправить это. Инициализация строки для строкового литерала (т. Е. Компилятор сказал, что проблема с nullptr). Это похоже на то, что у меня есть невидимый персонаж. Если кто-нибудь скажет мне, что я делаю неправильно, я бы очень признателен.
main.cpp
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <iostream>
#include <fstream>
#include "protocol.h"
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int menuChoice = 0;
char * fileName = nullptr;
char * byteArray = nullptr;
char * hexArray = nullptr;
int numberOfBytes = 0;
PrintMenu();
GetMenuChoice(menuChoice);
ExecuteMenuChoice(menuChoice, fileName, byteArray, hexArray, numberOfBytes);
return 0;
}
protocol.cpp
void GetFile(char * fileName)
{
//Prompt user for binary file
std::cout << "\nEnter filename: " << std::endl;
//Read in location of binary file
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cin.getline(fileName, 256);
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
}
protocol.h
#ifndef PROTOCOL_H
#define PROTOCOL_H
//Function declarations
void PrintMenu();
void GetMenuChoice(int &menuChoice);
void ExecuteMenuChoice(int menuChoice, char *& fileName, char *& byteArray,
char *& hexArray, int numberOfBytes);
void NewLine();
void ThankUser();
void ErrorMessage();
#endif
его не строковых литерала, если это не является строка присутствует в исходном коде. –
Вам нужно сделать 'char fileName [255];' поэтому у него есть место для размещения строки. – Patashu
Я подозреваю, что 'std :: cin.getline (fileName, 256);' прямо сейчас. Но вы даже не показываете, как он используется. Где минимальный пример, воспроизводящий проблему? –