Как я могу обнаружить NULL-строку или не NULL-строку - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу напечатать productCode, но через некоторое время, но когда он закончится, я получаю ошибку.

    void Queue::listProduct(Queue* _root)
    {
        Queue *iter;
        iter = _root;

        while (iter->productCode != "")

        {
            cout << iter->productCode << endl;
            iter = iter->next;
        }
    } 

productCode - строка первый productCode = "10", second productCode = "20", , , , last productCode = "60"

Я вижу 60, потом получаю ошибку.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

В заголовке вашего вопроса, чтобы сравнить массивы символов (строки) в стиле C для null:

char * p_text[] = "Hello World!";
if (p_text == nullptr) // Check the pointer for null.
{
 //...
}
if (p_text[0] == '\0') // Check if string is empty.

Сравнение std::string (для пустых):

std::string productCode;
if (productCode.empty())

Или

if (productCode.length() == 0)

A std::string не является указателем, поэтому не следует проверять его на NULL или nullptr.

0 голосов
/ 03 ноября 2018

Ваш цикл не должен проверять, является ли productCode пустым или нет. Следует проверить, является ли iter сам по себе нулевым или нет. Конец связанного списка обозначается нулевым указателем.

void Queue::listProduct(Queue* _root)
{
    Queue *iter = _root;
    while (iter)
    {
        cout << iter->productCode << endl;
        iter = iter->next;
    }
}

Так как вы не правильно останавливаете свой цикл, вы выходите за пределы конца списка, поэтому при попытке доступа к productCode для неверного узла вы видите сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...