Как вернуть строку из функции

char *foo()
{
    char str[10];

    gets_s(str);

    return str;
}

Не могу понять почему не работает. В консоль выводит непонятные символы вместо введенной строки.


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

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

потому что char str[10] - это локальная переменная и существует только внутри функции, когда вы выходите из функции, то переменная перестаёт существовать (ну если совсем просто)

чтобы иметь возможность возвращать из функции указатель на какие-то строки их надо создавать динамически:

в с++:

char* str = new char[10];

в c:

char* str = (char*)malloc(10 * sizeof(char));

или

char* str = (char*)calloc(10, sizeof(char));

Ну можно еще создать переменную со статическим классом хранения. – @eanmos

char *foo()
{
    static char str[10];

    gets_s(str);

    return str;
}

И ещё буфер можно передать как параметр для заполнения. – @Stanislav Volodarskiy

char *foo(char* str)
{
    gets_s(str);

    return str;
}
→ Ссылка