2013-03-07 12 views
0

我试图使用例如由:阅读文本,错误,同时试图使用例如

https://stackoverflow.com/a/6832677/1816083 ,但我有:

invalid conversion from `unsigned char*' to `char*' 
initializing argument 1 of `std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]' 
invalid conversion from `void*' to `size_t' 

在行:

size_t bytes_read = myfile.read((unsigned char *) buffer, BUFFER_SIZE); 
+3

这可能是您链接到答案没有得到一票的原因之一。 ;) – NPE 2013-03-07 08:37:59

+0

@NPE现在有一个。那么,-1是。 – 2013-03-07 08:44:23

+0

你只是想整个文件成一个线性数组与一个大胖读?或者你一次处理这一个缓冲大小? – WhozCraig 2013-03-07 08:54:08

回答

3

首先,read()需要char*而不是unsigned char*。其次,它不返回读取的字符数。

相反,尝试:

myfile.read((char*)buffer, BUFFER_SIZE); 
std::streamsize bytes_read = myfile.gcount(); 
+0

无效转换从'unsigned char *'到'char *'也许有些包括失踪?我是cpp的noob – cerber 2013-03-07 08:41:03

+0

@cerber从缓冲区的定义中删除word'unsigned' – kassak 2013-03-07 08:47:47

+0

@kassak他需要它作为'unsigned char'数组(请参阅问题的标题)。他应该*向''.read()'调用的第一个参数添加一个'(char *)'类型转换。 – WhozCraig 2013-03-07 08:50:32

1

恕我直言,编译器的输出是相当足够多。它告诉你,你试图让unsigned char*发挥作用,等待char*。 BTW,甚至有一个函数名

std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) 
[with _CharT = char ... 

如果你需要unsigned chars buffer[ ... ]然后将其转换为char*

unsigned char buffer[ BUFFER_SIZE ]; 
ifstream myfile("myfile.bin", ios::binary); 
if (myfile) 
{ 
    myfile.read((char*) buffer, BUFFER_SIZE); 
    //   ^^^^^^^ 
    size_t bytes_read = myfile.gcount(); 
} 
+0

http://stackoverflow.com/a/6832677/1816083,所以这个例子不好,如何正确地做到这一点? – cerber 2013-03-07 08:45:48

+0

@cerber你总是相信什么人?) – kassak 2013-03-07 08:47:07

+0

“所以这个例子很糟糕” - 是的。 “如何正确地做到这一点?“ - 将'buffer'声明为'char'数组或将其转换为'char *'而不是'unsigned char *' – borisbn 2013-03-07 08:48:28