从二进制文件c ++中读取一个以null结尾的字符串

use*_*383 1 c++ fstream

正如标题所示,我正在尝试从二进制文件中读取空终止字符串.

std::string ObjElement::ReadStringFromStream(std::ifstream &stream) {
    std::string result = "";
    char ch;
    while (stream.get(ch) != '\0') {
        result += ch;
    }
    return result; }
Run Code Online (Sandbox Code Playgroud)

我的空字符是'\ 0'

但是每当我调用它的方法时,它就会读到文件的末尾

std::ifstream myFile(file, std::ios_base::in | std::ios_base::binary);
myFile.seekg(startByte);

this->name = ObjElement::ReadStringFromStream(myFile);
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了吗?

Dre*_*wen 5

istream::get(char &)返回istream对该字符的引用,而不是读取的字符.您可以istream::get()像这样使用变体:

while ((ch = stream.get()) != '\0') {
    result += ch;
}
Run Code Online (Sandbox Code Playgroud)

或者使用返回的流引用作为bool:

while (stream.get(ch)) {
    if (ch != '\0') {
        result += ch;
    } else {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)


jot*_*tik 5

使用std::getline

#include <string> // for std::getline

std::string ObjElement::ReadStringFromStream(std::ifstream &stream) {
    std::string s;
    std::getline(stream, s, '\0');
    return s;
}
Run Code Online (Sandbox Code Playgroud)