передача одного из свойств структуры по указателю

Объясните пожалуйста, где моя ошибка? имеется следующая структура:

struct mainStruct {char *name; float numFloat; int numInt;} product;

и имеется функция в которая получает на вход указатель на char **getPointer:

void Func1(char **getPointer, char *text) {
   printf("\n%s", text);
   scanf("%[^\n\r]", *getPointer);
}

и при попытке передать указатель следующим образом:

Func1(&product.name, "Enter name: ");

У меня пропускается ввод и по итогу свойство name имеет значение NULL

p.s.func1 находится в отдельном файле, при передаче оставшихся свойств во внешние функции все работает корректно ( оставшиейся функции принимают параметры по типу float *getVar и int *getInt соответственно)


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

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

Надо примерно так

void Func1(char **getPointer, char *text)
{
    *getPointer = malloc(200);
    printf("\n%s", text);
    scanf("%199[^\n\r]", *getPointer);
}

Т.е. выделить какую-то память через malloc - только потом не забыть ее освободить при помощи free.

На ваше

char *str; Func1(&str, "Enter value: "); то переменная str будет инициализированна строкой и потом ее можно спокойно вывести

Вы просто не поняли, что это грубая ошибка. char *str; - локальная переменная, и вам так не повезло, что она, похоже, содержала мусор, указывающий на какую-то разрешенную память, в которую и записалась строка. Типичное неопределенное поведение...

Сами проверьте - сравните значение str до и после вызова функции.

→ Ссылка