функция возвращает указатель на первый символ ch в строке, что возвращать если символ не найден?

Есть функция которая ищет символ в строке и возвращает указатель на символ. что делать если символ не найден?

/* возвращает указатель на первый символ ch в строке*/
template <class T = char> 
const T* custom_strchr(const T* str, T ch)  noexcept   /* 'requires' --> C++20 */
    requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{ 
    const T *p = str;
    while(*p && *p != ch)p++;    
    return p;
}

Также есть функция которая возвращает адрес подстроки, аналогичный вопрос?

/* возвращает указатель на начало подстроки */
template <class T = char> 
const T* custom_strstr(const T* str, const T* sub_s) 
    requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{
    bool key = false;
    const T* p = str;

    while(!key && *p)
    { size_t i = 0;
        while(*(sub_s + i) && (*(p + i) == *(sub_s + i)))i++;
        if (!*(sub_s + i))
            key = true;
        else
            p++;
    }

    return  p;
   

Ответы (1 шт):

Автор решения: Вячеслав

Сделал так для custom_strchr как я понял вроде правильно так:

/* возвращает указатель на первый символ ch в строке*/
template <class T = char> 
const T* custom_strchr(const T* str, T ch)  noexcept   /* 'requires' --> C++20 */
    requires(std::is_same_v<T, char> || std::is_same_v<T, wchar_t>)
{ 
    const T *p = str;
    while(*p && *p != ch)p++;    
    return (*p) ? p : nullptr;
}
→ Ссылка