Как вернуть строку из функции
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;
}