Qt:从文件中读取下一个字符时出错

时间:2014-03-18 16:49:07

标签: c++ qt

我写了一个函数,它返回QTextStream中的下一个字符。有:

QString peek(QTextStream *stream){
    QString __str = '\0';
    stream->seek(stream->pos() + 1);
    __str = stream->read(1);
    stream->seek(stream->pos() - 2);
    stream->flush();
    return  __str;
}

例如,我有一个文件:

abcde

当我尝试在屏幕上显示功能结果时,输出正确:'b'。 但是当我尝试输出下一个字符然后输出第一个字符时,就像那样:

/* Any function to output */(peek(file) + file->read(1));

输出为:“ca”而不是“ba”。

怎么了?

对不起,如果这是一个愚蠢的问题而且抱歉我的英语不好:)

1 个答案:

答案 0 :(得分:1)

未定义下面表达式中的参数评估顺序。它不必从左到右,根本不是。

peek(file) + file->read(1)

在你的情况下,首先执行读取,推进位置,然后偷看得到'c'而不是'b'

你需要将其分解:

QString result = peek(file);
result += file->read(1);
Q_ASSERT(result == "ba");