В настоящее время я читаю "Тур по С++" by Byarne Stroustrup. Что имеет значение: на "указателях, массивах и ссылках" он привел пример об использовании 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 main(){
char* str = "Good morning!";
char c = 'o';
std::cout << count_x(str, c) << std::endl;
return 0;
}
Когда я запускаю программу, она выходит из строя. Я получаю исключение, созданное в строке
if (*p == x)
Если я изменил цикл таким образом:
for (; *p; p++)
if (*p == x)
++count;
Теперь все работает отлично! Я использую MSVС++ 14.0.
- Тот же код, что и я, на
ideone
Я не получаю исключение, но результат всегда0
, который должен быть3
: