期望malloc函数的大小不同

Different size of expected malloc function

本文关键字:malloc 函数 期望      更新时间:2023-10-16

解决方案可能是微不足道的,但我不是生动的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);

此外,我不得不提到,在我的文件中有很多不可打印的值

您的代码假设文件包含一个终止的''字符,以使字符数组成为字符串。这个终止符是strlen()寻找的,所以如果它不在那里,您必须添加它。

一种确定的方法是malloc()(应该是new[]或c++中更花哨的东西)比file_size多1个字符,并在加载后将其设置为''

此外,您必须检查分配和I/O是否成功。

不要在c++中使用malloc;

选项1

new代替;

buffer = new char[filesize]

你必须使用delete[]来释放你用完的内存

选项2

你也不应该在c++中使用原始指针(好吧,如果你知道你在做什么,感觉100%,喝一杯好咖啡,通常是勇敢的,你可以)。

在这种情况下,我想我会使用std::vector<char>

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

这样,std库为您管理内存