malloc指针函数传递fread

Kel*_*ton -1 c c++

无法弄清楚什么是错的,我似乎没有从恐惧中得到任何东西.

port.h

#pragma once
#ifndef _PORT_
    #define _PORT_
    #include <string>
    #ifndef UNICODE
        typedef char chr;
        typedef string str;
    #else
        typedef wchar_t chr;
        typedef std::wstring str;
        inline void fopen(FILE ** ptrFile, const wchar_t * _Filename,const wchar_t * _Mode)
        {
            _wfopen_s(ptrFile,_Filename,_Mode);
        }
    #endif
#endif
Run Code Online (Sandbox Code Playgroud)

在main()里面

    File * f = new File(fname,FileOpenMode::Read);
    chr *buffer;
    buffer = (wchar_t*)malloc(f->_length*2);
    for(int i=0;i<f->_length;i++)
    {
      buffer[i] = 0;
    }
    f->Read_Whole_File(buffer);
    f->Close();
    for(int i=0;i<f->_length;i++)
    {
      printf("%S",buffer[i]);
    }
    free(buffer);
Run Code Online (Sandbox Code Playgroud)

在文件类中

    void Read_Whole_File(chr *&buffer)
    {
        //buffer = (char*)malloc(_length);
        if(buffer == NULL)
        {
            _IsError = true;
            return;
        }
        fseek(_file_pointer, 0, SEEK_SET);
        int a = sizeof(chr);
        fread(&buffer,_length ,sizeof(chr) , _file_pointer);            
    }
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 6

你在整个地方混合指针和引用.

你的函数只需要一个指向缓冲区的指针:

void Read_Whole_File(char *buffer) { ... }
Run Code Online (Sandbox Code Playgroud)

你应该按原样传递指针fread(),不要取指针的地址:

size_t amount_read = fread(buffer, _length, sizeof *buffer, _file_pointer);
Run Code Online (Sandbox Code Playgroud)

还要记住:

  • 如果您有指向ptr某种类型的指针,则可以使用sizeof *ptr并删除重复类型名称的需要.
  • 如果您已经知道文件的长度,请将其传递给函数,这样您就不需要计算两次了.
  • 在C中,不要转换返回值malloc().
  • 在进行内存分配和I/O时检查错误,事情可能会失败.