0

我正在将我的所有char*更新为我的项目中的字符串,但我被困在这部分:

void Load(char* resourceName)
{
    _fileReader.seekg(0);
    while(_fileReader.tellg() < _FILE_SIZE)
    {
        int cResourceID = 0;
        char* cResourceName = new char[_MAX_RESOURCE_NAME];

        _fileReader.read((char*)&cResourceID, 4);
        _fileReader.read((char*)cResourceName, _MAX_RESOURCE_NAME);

        if(cResourceName == resourceName)
        {
            //Resource Found, do something
        }
    }
}

当我更改为字符串时,我得到:

void Load(string &resourceName)
{
    _fileReader.seekg(0);
    while(_fileReader.tellg() < _FILE_SIZE)
    {
        int cResourceID = 0;
        string cResourceName;

        _fileReader.read((char*)&cResourceID, 4);

        //I don't know how to do this:
        _fileReader.read((char*)cResourceName, _MAX_RESOURCE_NAME);

        //And nor this:
        if(cResourceName == resourceName)
        {
            //Resource Found, do something
        }
    }
}

因为我一直在阅读_MAX_RESOURCE_NAME字符,所以我的 char* 最终会像: "NAME !#$II#$II" (一堆未初始化的字符和/或空格)甚至比较(char* "NAME_ _ _" == string "NAME") 失败。

我可以像使用 char* 一样使用 ifstream 将 X 个字符读入字符串吗?

以及如何清除文件中的空格/未初始化字符以比较名称?

编辑:忘记添加它是一个二进制文件,我不能使用 std::getline()

4

1 回答 1

0

从文件中读取字符后,应在最后读取的字符后添加零(0x0 或 '\0')。您的缓冲区大小应该足够大以容纳零终止。

在您的情况下,直接读取 std::string 可能不是一个好主意。像以前一样将其读入缓冲区,然后将 char* 缓冲区分配给字符串。

于 2013-08-08T21:53:43.263 回答