I am working on my school assignment which requires me to pass a structure that contains a char pointer from the client program to the server and print the structure data in the Server.c program. I am being able to pass the structure properly and being able to retrieve the integer data from the structure in server.c, but I am getting an error "Segmentation fault" when I try to print the char* data in the server.c program that is coming from the Client.c program. How do I fix it?
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#define PORT 8080
struct StudentInfo
{
char* name;
int roll;
}student;
int main()
{
student.name=(char*)malloc( 50 * sizeof(char));
student.name="Sara You";
student.roll=124;
int network_socket=socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in serveraddr;
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(PORT);
serveraddr.sin_addr.s_addr=INADDR_ANY;
sendto(network_socket, &student, sizeof(student),0, (struct sockaddr*) &serveraddr, sizeof(serveraddr));
close(network_socket);
}
Server.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<string.h>
#define PORT 8080
struct StudentInfo
{
char* name;
int roll;
} student1;
int main()
{
student1.name=(char*)malloc( 50 * sizeof(char));
struct sockaddr_in serveraddr, cliaddr;
int network_socket=socket(AF_INET, SOCK_DGRAM, 0);
memset(&serveraddr,0,sizeof(serveraddr));
memset(&cliaddr,0,sizeof(cliaddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(PORT);
serveraddr.sin_addr.s_addr=INADDR_ANY;
bind(network_socket, (struct sockaddr*) &serveraddr, sizeof(serveraddr));
int len=sizeof(cliaddr);
recvfrom(network_socket, &student1, sizeof(student1), 0, (struct sockaddr*) &cliaddr, &len);
printf("Name %s: ", student1.name); //Segmentation fault
printf("Name %d: ", student1.roll);
}