2013-03-07 4 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

+0

@NPE Теперь есть один. Ну, -1. –

+0

Вы хотите, чтобы весь файл попал в линейный массив с одним большим жиром? или вы обрабатываете этот размер одного буфера одновременно? – WhozCraig

ответ

3

Во-первых, read() принимает char*, а не unsigned char*. Во-вторых, он не возвращает количество прочитанных символов.

Вместо этого попробуйте:

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

неверное преобразование из 'unsigned char * 'в' char *' возможно некоторые из них отсутствуют? я noob в cpp – cerber

+0

@cerber удалить слово 'unsigned' из определения буфера – kassak

+0

@kassak ему нужен он как массив' unsigned char' (см. заголовок вопроса). Он должен * добавить * a '(char *)' приведение к первому параметру вызова '.read()'. – WhozCraig

1

ИМХО выход компилятора достаточно прийти. Он говорит вам, что вы пытаетесь дать unsigned char* функции, которая ждет char*. Кстати, есть даже имя функции

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

+0

@cerber И что вы всегда верите людям?) – kassak

+0

«так что этот пример плох» - да. «Как это сделать правильно?msgstr "объявить' buffer' как массив 'char''s или отдать его' char * 'вместо' unsigned char * ' – borisbn