[英]Different size of expected malloc function
該解決方案可能微不足道,但在cpp中我並不生動。
執行代碼后, function strlen((char*)buffer)
的值比我想的要高。 這是為什么? 我該如何解決? ( if filesize=48, than strlen((char*)buffer)=64
,它也應該是48!)
ifstream iffile;
iffile.open(argv[1], ios::in | ios::binary | ios::ate);
if (iffile.is_open())
{
long filesize = iffile.tellg();
if (filesize > 0)
{
iffile.seekg(0, ios::beg);
{
long pos = iffile.tellg();
if (pos != filesize)
{
char *buffer;
buffer = (char *)malloc(filesize * sizeof * buffer);
if (buffer != NULL)
{
memset(buffer, 0, filesize - pos);
iffile.read((char *)buffer, filesize);
此外,我不得不提到,我的文件中有很多不可打印的值。
您的代碼假定該文件包含一個終止符'\\0'
,以使字符數組變成字符串。 該終止符是strlen()
尋找的,因此,如果不存在,則必須添加它。
確保的一種方法是malloc()
(應該是new[]
或C ++中的一個奇特的東西),比file_size
多1個字符,並在加載后將其設置為'\\0'
。
另外,您必須檢查分配和I / O是否成功。
切勿在C ++中使用malloc
; 這是一個C主義。
使用new
代替;
buffer = new char[filesize]
完成使用內存后,必須使用delete[]
釋放內存。
您也不應該在C ++中使用原始指針(嗯,如果您知道自己在做什么並且感覺100%,可以喝一杯咖啡,並且通常都很勇敢,則可以)。
在這種情況下,我想我會使用std::vector<char>
。
std::vector<char> buffer(filesize);
iffile.read(&buffer.front(), filesize);
這樣, std
庫為您管理內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.