我在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