QT: ASSERT: «uint (i) <uint (size ())» в файле C: \ Qt \ Qt5.14.2 \ 5.14.2 \ mingw73_64 \ include / QtCore / qstring.h, строка 1029 - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть файл из 10 строк, я хочу сделать конкретную c вещь, которая не важна в этом контексте. Достигнув конца строки, программа cra sh с ошибкой в ​​заголовке.

Я зашла в строку заголовочного файла, это выглядит так:

{ 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" строку файла символ за символом.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Это означает, что i не является допустимым индексом для всего, что возвращается из readLine(). Другими словами i больше, чем длина строки.

Лог c в l oop действительно любопытен. Я уверен, что он делает не то, что вы думаете.

Я думаю то, что вы пытаетесь написать, выглядит примерно так

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;
}

Этот код просто читает одна строка, ваш код читает несколько строк.

0 голосов
/ 05 апреля 2020

Я вижу две проблемы (если не понимаю, как работают at () и readLine ()):

1) В операторе while() вы читаете в строке с ...in.readLine()..., но затем в l oop вы прочитали снова с другим ...in.readLine().... Таким образом, в начале первой итерации вы читаете в строке, а затем, когда тело l oop выполняет, вы снова читаете в строке.

2) Для каждой итерации while вы увеличение i и захват этого символа из in. Итак, для первой итерации (i=0) вы берете 0-й символ, для второй (i=1) вы получаете 1-й символ .... и т. Д.

...