#include <cstddef>
#include "ex1.h"
unsigned int str_len_r(const char* str){
if (*str == '\0')
{
return 0;
}
else
{
return 1 + str_len_r(++str);
}
}
Может кто-нибудь подробно объяснить, почему это не работает? Я продолжаю получать эти длинные ошибки ошибки сегмента, но я не могу найти действительно хорошее объяснение того, что я делаю не так. Так это называется
string str;
while (getline(cin, str)) {
if (str == "<NULL>")
cout << "Length of NULL string is " << str_len_r(NULL) << endl;
else
cout << "Length of string '" << str << "' is " << str_len_r(str.c_str()) << endl;
}
Что «работает» в этом контексте? Как вы вызываете функцию, что она должна делать, что вы пытались сделать для ее отладки и т. д. Кроме того, рекурсия - ужасное злоупотребление при вычислении длины строки (да, я знаю, что система образования CS думает это отличная идея и у вас нет выбора ...).
Есть языки, которые оптимизируют рекурсию как цикл. C++ не относится к таким языкам. Рекурсия в C++ может легко вызвать переполнение стека, которое на некоторых платформах вызывает ошибку сегмента.
Разыменование нулевого указателя является неопределенным поведением. На вашей платформе такое неопределенное поведение проявляется как ошибка сегмента.
ОТ: Вы ожидаете, что <NULL> будет набран пользователем или перенаправлен из какой-то другой программы ??
Как исправить нулевой указатель, сделав его равным чему-то?
Связанный с if (!str) return 0;: https://stackoverflow.com/questions/3825668/checking-for-nul l-указатель-в-c-c




