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

에 캐스팅이 필요한 경우 BTW, 심지어 함수 이름

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

가있다. ;) – NPE

+0

@NPE 현재 하나가 있습니다. 음, -1입니다. –

+0

전체 파일을 하나의 큰 뚱뚱한 읽기가있는 선형 배열로 바꾸시겠습니까? 또는 한 번에이 버퍼 크기를 처리하고 있습니까? – WhozCraig

답변

3

우선, read()unsigned char*이 아닌 char*이됩니다. 둘째, 읽은 문자 수를 반환하지 않습니다.

대신, 시도 :

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

'unsigned char * '에서'char *'로의 변환이 잘못되었을 수도 있습니다. 일부는 누락 된 것을 포함합니까? 나는 Cpp의 놈이다. – cerber

+0

@cerber는'unsigned'를 버퍼의 정의에서 제거한다. – kassak

+0

@kassak 그는 그것을'unsigned char' 배열로 필요로한다. (질문의 제목을 보라). 그는'(char *)'를'.read()'호출의 첫 번째 매개 변수에 추가해야한다. – WhozCraig

1

컴파일러의 출력이 꽤 한 정도로입니다 이럴. 그것은 char*을 기다리는 unsigned 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

"이 예제는 좋지 않습니다"- 예. "이것을 올바르게하는 방법?"-'buffer'를'char'의 배열로 선언하거나'unsigned char * '대신'char *'에 캐스팅하십시오. – borisbn