以下代码给我RWBoundsErr错误


  抛出'RWBoundsErr'实例后终止调用


bool filterData()
{
    while(!inputFile_.eof())
    {
        currentLine_.readLine(inputFile_);
        //outputFile_<<currentLine_(0,1)<<currentLine_(2,1)<<currentLine_(4,13)<<currentLine_(0,1)<<currentLine_(2,1)<<currentLine_(4,13)<<endl;
        outputFile_<<currentLine_[0]<<currentLine_[2]<<currentLine_(4,13)<<currentLine_[0]<<currentLine_[2]<<currentLine_(4,13)<<endl;
    }
    return (TRUE);
}


但是,如果我改用带注释的行,则一切按预期进行。

currentLine_的数据类型为RWCString

outputFile_和inputFile_具有inout / output txt文件的路径

文本文件的样本内容

ABCD1234567890123 2017/10/16 13:40:28
WXYZ9876543210987 2017/10/16 13:40:28


请注意,每行末尾都有一个尾随空格

即使我已经找到解决此问题的方法,但我仍想了解为什么此代码失败。

最佳答案

查看与operator<<()RWCString运算符相关的文档:

RWvostream&
operator<<(RWvostream&, const RWCString& str);
RWFile&
operator<<(RWFile&,     const RWCString& str);
Saves string str to a virtual stream or RWFile, respectively.


RWFile

RWFile&
operator<<(RWFile&,     const RWCString& str);
Saves string str to a virtual stream or RWFile, respectively.
...
RWFile&
operator<<(RWFile&,     const RWInteger& x);
Saves the RWInteger x to a virtual stream or RWFile, respectively.


没有可以使用<<char运算符。

currentLine_(0,1)是可以与<<运算符一起使用的子字符串

RWCSubString
operator()(size_t start, size_t len);
RWCConstSubString
operator()(size_t start, size_t len) const;


另一方面,currentLine_[0]char

char&
operator[](size_t i);
char
operator[](size_t i) const;
Returns the ith byte.


在您的情况下,尝试将char<<运算符一起使用会导致RWBoundsErr错误。

关于c++ - 在C++中使用RWCString读取文本文件时获取RWBoundsErr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48719896/

10-10 21:23