Ваш вопрос:
как вернуть struct переменную из функции в c-программировании?
не соответствует вашему коду.
В вашемкод, который вы пытаетесь вернуть один элемент структуры (т.е. c.name
), но не всю структуру.Поскольку член структуры является массивом символов (для использования в виде строки, кажется), вы получаете много ошибок, потому что вы не можете назначать строковые переменные (или переменные массива символов) с помощью оператора =
.
Если вы действительно хотите вернуть структуру, просто выполните:
struct student name(struct student *ptr)
{
struct student c;
strcpy(c.name,ptr->name);
return c; // Just use c instead of c.name;
}
, и вызов из main
будет:
b = name(&a);
BTW:
scanf("%c",&a.name);
неправильно.Я предполагаю, что вы хотите прочитать слово, а не просто символ, поэтому %s
- это спецификатор для использования.Например: scanf("%9s", a.name);
Обратите внимание, что scanf
с %s
позволяет сканировать только 1 слово.В качестве имени может быть несколько слов, которые вы можете использовать вместо fgets
.
Это также относится к printf
, т.е. используйте %s
вместо %c