У меня динамически выделяется память:
//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*
Мне нужно читать файлы символ за символом и хранить в буфере. Обратите внимание, что это пример кода. Я на самом деле должен читать несколько файлов и хранить в одном буфере, поэтому я должен использовать буфер с индексом.
Как я могу улучшить этот код?
Ошибка
ошибка, аргумент типа char несовместим с типом char *
связано с istream::read
принимает указатель на символ:
istream& read (char* s, streamsize n);
поэтому вы должны написать:
inpt.read( &mybuffer[i], 1);
Вы должны передать указатель на символ в качестве ввода ifstream :: прочитать, но вы передаете полукокса
inpt.read(&mybuffer[i],1);
^
Я бы посоветовал вам избегать выделения памяти и переходить к чтению. Вот пример кода, который открывает файл и читает каждую строку в объект «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;
}
}
Я думаю, что это улучшение должно быть сделано в вашей программе.