istream — чтение и запись файлов в переполнении стека

У меня динамически выделяется память:

//dynamic buffer
char *mybuffer;
cin>>n;
mybuffer=new char[n];
//open file for reading
ifstream inpt(filename.c_str(), ios::binary);
for(unsigned int i=0;i<n;i++){

//copy every single character into buffer
inpt.read(mybuffer[i],1);
}

says error, argument of type char is incompatible with type char*

Мне нужно читать файлы символ за символом и хранить в буфере. Обратите внимание, что это пример кода. Я на самом деле должен читать несколько файлов и хранить в одном буфере, поэтому я должен использовать буфер с индексом.

Как я могу улучшить этот код?

0

Решение

Ошибка

ошибка, аргумент типа char несовместим с типом char *

связано с istream::read принимает указатель на символ:

istream& read (char* s, streamsize n);

поэтому вы должны написать:

inpt.read( &mybuffer[i], 1);
3

Другие решения

Вы должны передать указатель на символ в качестве ввода ifstream :: прочитать, но вы передаете полукокса

inpt.read(&mybuffer[i],1);
^
3

Я бы посоветовал вам избегать выделения памяти и переходить к чтению. Вот пример кода, который открывает файл и читает каждую строку в объект «std :: string» и печатает на консоли.
«std :: string» позаботится обо всем управлении памятью, и вы сможете прочитать его и использовать в своей программе.

int main()
{

std::string  file =  "input.txt";
std::string line;
std::ifstream  text_filestream(file.c_str());

while(std::getline(text_filestream, line)) {
// now you can use the line object by anyway as per your requirement.
std::cout<<line<<std::endl;
}
}

Я думаю, что это улучшение должно быть сделано в вашей программе.

0
По вопросам рекламы [email protected]