2010-07-18 50 views
1

我有一个char *缓冲区来保存我以二进制模式读取的文件。我知道文件的长度是70个字节,这是用来产生正确大小的缓冲区的值。问题是,阵列中有17或18个额外的空间,因此一些随机字符被添加到结尾。这可能是一个unicode问题?MS Visual C++ 2008字符缓冲区长于定义

ulFLen存储字节的文件的大小,并有(对我在测试文件70)

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

由于它是一个char阵列正确的值,你可能忘了终止NULL字符。

在这种情况下,正确的方法是:

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

但请注意,你只需要依赖于它,像串例程或使用printf使用%s当例程终止NULL字符。如果你使用了知道长度(70个字符)这个事实的例程,它也可以不用NUL字符。

+0

谢谢,工作完美 – Dox5 2010-07-18 14:13:01

0

在读取数据后添加以下片段,它将添加所需的终止零。

而且顺便说一句应该是pcfBuffer = new char[ulFLen+1];

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

这将工作无论多少数据需要被读取(在你的情况gcount()总是返回70,所以你可以做以下代替:pcfBuffer[70]=0;