Ошибка С2664, как исправить?

#include <iostream>
using namespace std;

char* get_substr(char* sub, char* str);

int main()
{   
    char* substr;
    substr = get_substr("three", "one two three four");
    cout << "substring found: " << substr;

    return 0;

}

char* get_substr(char* sub, char* str) {
    int t;
    char* p, * p2, * start;
    for (t = 0; str[t]; t++) {
        p = &str[t];
        start = p;
        p2 = sub;
        while (*p2 && *p2 == *p) {
            p++;
            p2++;
        }

        if (!*p2)
            return start;
    }
    return 0;
}

Скриншот с VS2022 подсветка и описание ошибок

Скриншот с VS2022 подсветка и описание ошибок


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

Автор решения: Den

Не понимаю в чем собственно проблема? Там же написано все четко.

Он подчеркивает 2 аргумента и говорит, что не может сделать неявное преобразование типов и показывает, что есть функция где это происходит. В комментарии выше все уже сказали, что по умолчания, ваши строки это константные строковые литералы(почитайте что это такое тут).

Чтобы это исправить, вам нужно либо аргументы сделать просто char* или в функции дописать const у ее параметров(если в функции не предусмотрено изменение входных данных).

А так же, вам стоит почитать про явное и неявное преобразование типов.

→ Ссылка