我有一个10行的文件,我想做一件在上下文中不重要的特定事情。到达一行的末尾后,程序因标题中的错误而崩溃。
我进入了它所指的头文件的行:
{ Q_ASSERT(uint(i) < uint(size())); return QChar(d->data()[i]); }
但我还是不明白。这是我的代码块:
QFile file("file.txt");
QTextStream in(&file);
QString s;
int i = 0;
while(!in.readLine().at(i).isNull()) {
s = s + in.readLine().at(i);
++i;
}
编辑:我想做的是在QString变量"s"中逐字符复制一行文件。
这意味着i
不是从readLine()
返回的任何内容的有效索引。换句话说,CCD_ 3大于线的长度。
循环中的逻辑真的很奇怪。我确信它没有做你认为它在做的事情。
我认为你想写的是类似于的东西
QFile file("file.txt");
QTextStream in(&file);
QString s;
QString line = in.readLine();
int i = 0;
while (!line.at(i).isNull()) {
s = s + line.at(i);
++i;
}
该代码只读取一行,您的代码读取多行。
我看到了两个问题(除非我误解了at((和readLine((的工作原理(:
1( 在while()
语句中,您使用...in.readLine()...
读取一行,但在循环中,您再次使用另一个...in.readLine()...
读取。因此,在第一次迭代开始时,您读取一行,然后在循环主体执行时,您再次读取一行。
2( 对于while
的每一次迭代,您都在递增i
并从in
中获取该字符。因此,对于第一次迭代(i=0
(,您获取第0个字符,对于第二次迭代(i=1
(,您获得第1个字符。。。。等等