Я попытался использовать следующий пример кода, приведенный в "Тур C ++", который использует nullptr для разрыва цикла над строкой с нулем в конце.Однако моя программа-пример, похоже, не останавливается в цикле.
Выдержка из книги:
первая версия кода из книги:
`` `
int count_x(char∗ p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to nothing)
{
if (p==nullptr) return 0;
int count = 0;
for (; p!=nullptr; ++p)
if (∗p==x)
++count;
return count;
}
`` `
вторая упрощенная версия
```int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to
// nothing)
{
int count = 0;
while (p) {
if (*p==x)
++count;
++p;
}
return count;
}```
оператор следующий код в книге: оператор while выполняется до тех пор, пока его условие не станет ложным.Проверка указателя (например, while (p)) эквивалентна сравнению указателя с нулевым указателем (например, while (p! = Nullptr)).
Моя программа использует ту же структуру:
char name[] = "ABCD";
char *p = name;
int count = 0;
int loopc = 0;
while (p)
{
loopc++;
if(*p == '\0')
cout << "zero found\n";
else
cout << *p << "\n";
//emergency stop
if (loopc == 12)
break;
p++;
}
ожидается: должен остановиться после печати имени.актуально:
A
B
C
D
zero found
zero found
zero found
zero found
zero found
zero found
zero found
zero found