Хорошо, это будет работать: (Объяснение ниже)
test.h: (Новый файл!)
struct student{
int rollNumber;
char name[20];
int marks;
};
test.c:
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
void func(struct student *devanshu);
int main(){
struct student devanshu;
func(&devanshu);
printf("--------------------%d\n", devanshu.rollNumber);
printf("--------------------%d\n", devanshu.marks);
printf("--------------------%s\n", devanshu.name);
}
NewTest.c:
#include <string.h>
#include "test.h"
void func(struct student *devanshu)
{
devanshu->rollNumber = 1;
devanshu->marks = 909;
strcpy(devanshu->name, "abc.xyz");
return;
}
Этот
unsigned char name[20];
позже вызовет проблемы в strcpy ().Измените на просто символ.
Это
void func(struct student devanshu);
не так, но вы попадаете в ловушку.Структуры в C всегда передаются по значению (копии) всей структуры.Итак, если вы хотите, чтобы func () изменила исходную структуру, вы должны явно указать это так:
void func(struct student *devanshu);
Затем в func вам нужно изменить синтаксис доступа на использование оператора -> вместоиз '.'
Поскольку вы используете struct student в обоих файлах, вам нужно переместить объявление struct в заголовочный файл.Вы могли бы (как я сделал в самом первом редактировании) также повторить декларацию, потому что я был ленив, но комментарии на 100% правы: это очень опасная практика, поэтому я изменил ее.