簡體   English   中英

不同大小的預期malloc函數

[英]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主義。

選項1

使用new代替;

buffer = new char[filesize]

完成使用內存后,必須使用delete[]釋放內存。

選項2

您也不應該在C ++中使用原始指針(嗯,如果您知道自己在做什么並且感覺100%,可以喝一杯咖啡,並且通常都很勇敢,則可以)。

在這種情況下,我想我會使用std::vector<char>

std::vector<char> buffer(filesize);
iffile.read(&buffer.front(), filesize);

這樣, std庫為您管理內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM