2010-07-18 2 views
1

바이너리 모드에서 읽은 파일을 저장할 char * 버퍼가있다. 내가 파일의 길이는 70 바이트이며 이것은 올바른 크기의 버퍼를 생산하는 데 사용되는 값임을 압니다. 문제는 배열에 17 또는 18 개의 여분의 공백이 있으므로 임의의 문자가 끝에 추가된다는 것입니다. 유니 코드 문제일까요?MS Visual C++ 2008 char 버퍼가 정의 된 것보다 길다.

ulFLen 바이트의 파일의 크기를 저장하고 그것이 char 배열이므로

//Set up a buffer to store the file 
pcfBuffer = new char[ulFLen]; 

//Reading the file 
cout<<"Inputting File..."; 
fStream.seekg(0,ios::beg); 
fStream.read(pcfBuffer,ulFLen); 
if(!fStream.good()){cout<<"FAILED"<<endl;}else{cout<<"SUCCESS"<<endl;} 

답변

1

을 (전에서 테스트하고있어 파일 70) 올바른 값을 가지고, 당신은 아마 종료 NUL 문자를 잊어 버렸습니다 .

//Set up a buffer to store the file and a terminating NUL character 
pcfBuffer = new char[ulFLen+1]; 

//Reading the file 
cout<<"Inputting File..."; 
fStream.seekg(0,ios::beg); 
fStream.read(pcfBuffer,ulFLen); 
if(!fStream.good()){cout<<"FAILED"<<endl;}else{cout<<"SUCCESS"<<endl;} 

// Add NUL character 
pcfBuffer[ulFLen] = 0; 

을하지만 당신은 단지 %s를 사용하여 printf를 사용하는 경우 문자열 루틴처럼, 그것은에 따라 또는 루틴의 종료 NUL 문자를 필요가 있습니다 :

이 경우 올바른 방법이 될 것입니다. 길이 (70 자)를 알고 있다는 사실을 사용하는 루틴을 사용하면 NUL 문자도없이 작동합니다.

+0

감사합니다. 완벽하게 작동했습니다. – Dox5

0

데이터를 읽은 후 다음 스 니펫을 추가하면 필요한 Zero가 추가됩니다.

그리고 BTW는 pcfBuffer = new char[ulFLen+1];

size_t read_count = fStream.gcount(); 
if(read_count<=ulFlen) 
    pcfBuffer[read_count]=0; 

(대신 다음을 수행 할 수 있도록, gcount() 항상 70를 반환해야합니다 귀하의 경우 : pcfBuffer[70]=0;을)이 읽기해야하는 데이터의 양에 상관없이 작동해야한다