我在VS2010 Windows 7中编写C++。我尝试读取大小为64字节的文件。下面的代码:新的和malloc分配额外的16个字节
BYTE* MyReadFile(FILE *f)
{
size_t result;
BYTE *buffer;
long lSize;
if (f == NULL)
{
fputs ("File error", stderr);
exit (1);
}
fseek (f, 0, SEEK_END);
lSize = ftell (f);
rewind (f);
//buffer = (BYTE*) malloc (sizeof(char)*lSize);
buffer = new BYTE[lSize];
if (buffer == NULL)
{
fputs ("Memory error", stderr);
exit (2);
}
result = fread (buffer, 1, lSize, f);
if (result != lSize)
{
fputs ("Reading error",stderr);
exit (3);
}
fclose (f);
return buffer;
}
当我得到的文件大小是64,但是当我分配内存为它与新的字节[lSize所]我得到80个字节的空间,从而奇怪的序列ээээ«««««在缓冲区的末尾添加«««系统。你能告诉我如何处理这个问题吗?
你是如何打印出来?如果它是一个C字符串,则需要NULL结束。 – Mysticial 2012-02-22 07:51:44
在result = fread(buffer,1,lSize,f)后插入'int buffSize = ftell(buffer)';'告诉我buffSize的值。另外为什么你混合使用c(fseek,ftell等)和C++(new)?你为什么不坚持这个或那个? – Alexander 2012-02-22 07:56:45
@Mysticial:空终止,而不是空终止('NULL'是一个空指针常量)。 – 2012-02-22 08:07:18