2014-03-30 106 views
0

我有一个动态分配的内存:读取写入文件中C++

//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* 

我需要读取缓冲字符和存储文件的字符。请注意,这是示例代码。我其实应该读取多个文件并存储在单个缓冲区中,所以我应该使用具有索引的缓冲区。

我该如何改进此代码?

+1

你甚至不需要'for'循环,只需要:'inpt.read(mybuffer,n)'。 – 0x499602D2

回答

3

误差

误差,char类型的参数是与类型char不相容*

是由于istream::read需要字符指针:

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

所以你应该写:

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

您应该传递一个指向char的指针作为ifstream::read的输入,但是您传递的是字符。

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

我建议你避免分配内存并传递给read.Here是打开文件并将每行读入“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; 
} 
} 

我想这个改进应该在你的程序中完成。