Почему указатель на символ, который передается по значению, не находит нулевой терминатор? - PullRequest
1 голос
/ 03 декабря 2011

Я уже давно смотрю на это, и меня смущает то, что происходит с моей for петлей.

Для начала у меня есть пользователь, который вводит фразу, которая читается с использованием cin.getline()

const int  STRING_MAX  = 1001;
char*      inputString = nullptr;

inputString = new char[STRING_MAX];
cin.getline(inputString, STRING_MAX, '\n');

В случае, если кому-то интересно ... Я не заполняю буфер (что в любом случае не должно иметь значения). Я ввожу только около 25 символов.

Далее inputString передается по значению в Palindrome class функцию-член

word(char* source)

Это все, что я сейчас пытаюсь сделать в функции:

bool Palindrome::word(char* source) {
  for (char* iterator = source; iterator != '\0'; iterator++)
    cout << *iterator << endl;
}

На самом деле я делаю больше, но в данный момент я сократил код до того, что вы видите выше, и по какой-то причине, которую я не понимаю, цикл проходит за пределами char* array

Может ли кто-нибудь помочь мне понять, что здесь происходит?

Между прочим, я хорошо знаю класс строки в C ++, однако, для этого назначения (инструктор хочет, чтобы мы использовали указатели и операторы new и delete).

1 Ответ

3 голосов
/ 03 декабря 2011

iterator != '\0' Проверяет, является ли iterator нулевым указателем. Это никогда не будет так, и это не то, что вы действительно хотите.

Ваш код неверен, но он просто действительный код, потому что '\0' является лексическим представлением целочисленного значения ноль и, следовательно, является константой нулевого указателя.

Чтобы проверить, указывает ли iterator на нулевой терминатор, вам нужно использовать *iterator != '\0' (или просто проверить *iterator, поскольку целочисленное значение, равное нулю, оценивается как ложное).

...