c++ - Linux下文件读取方式不同? C++

标签 c++ linux mingw32

我是一个相当新的程序员,但我认为我的 google-fu 非常有能力,并且我花了几个小时进行搜索。

我有一个简单的 SDL 应用程序,它从二进制文件中读取(2 个字节作为魔数(Magic Number),然后每个“图 block ”5 个字节) 然后它显示缓冲区中的每个图 block ,字节决定 x、y、id、可通过性等。 所以这实际上只是关卡加载。

它可以在任何 Windows 计算机上正常运行(经过测试的 Windows Server 2008、7/64 和 7/32) 但是当我在 Linux 上编译它时,它会在随机位置显示随机图 block 。 我很想说它是从 RAM 中的错误部分读取的,但我实现了魔数(Magic Number),因此如果前 2 个字节输出,它会返回错误。

我很想自己解决这个问题,但它现在让我很烦恼,除非我可以在移动中编程(我的笔记本电脑运行 Linux),否则我无法取得更大的进展。 我在 Linux 上使用 G++,在 Windows 上使用 mingw32g++。

bool loadlevel(int level_number)
{
    int length;
    std::string filename;
    filename = "Levels/level";
    filename += level_number+48;
    filename += ".lvl";
    std::ifstream level;
    level.open(filename.c_str(),std::ios::in|std::ios::binary);
    level.seekg(0,std::ios::end);
    length = level.tellg();
    level.seekg(0,std::ios::beg);
    char buffer[length];
    level.read(buffer,length);
    if (buffer[0] == 0x49 && buffer[1] == 0x14)
    {
        char tile_buffer[BYTES_PER_TILE];
        int buffer_place = 1;
        while(buffer_place < length)
        {
            for (int i = 1;i <= BYTES_PER_TILE;i++)
            {
                tile_buffer[i] = buffer[buffer_place+1];
                buffer_place++;
            }
            apply_surface(tile_buffer[1],tile_buffer[2],tiles,screen,&clip[tile_buffer[3]]);
        }
    }
    else
    {
        // File is invalid
        return false;
    }
    level.close();
    return true;
}

提前致谢!

最佳答案

您的数组处理不正确。
C/C++ 中的数组索引从 0 开始。

您已将“tile_buffer”定义为大小为“BYTES_PER_TILE”的数组。
如果 BYTES_PER_TILE 为 5,则您的数组将包含元素tile_buffer[0] 到tile_buffer[4]。

在内部 for 循环中,您从 1 循环到 5,因此会发生缓冲区溢出。

我不知道这是否是您问题的原因,但这肯定不会有帮助。

关于c++ - Linux下文件读取方式不同? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823091/

相关文章:

c - 多核处理器中的线程

linux - 删除具有唯一基名的文件?

python - appcfg.py update 不存储 cookie 并不断询问密码

C++ fstream 错误

c++ - github上的CMake/C++项目组织

php - 创建过于简单的功能是不是不好的风格?

linux - 如何从 Shell 脚本中停止 CACHE 实例

C++11 MinGW 4.9.1 shared_ptr 和 const 静态类字段结果 "Undefined reference"

c++ - GLFW MinGW 链接错误

c++ - '互锁增量' : identifier not found error in visual c++ 2008