I am implementing a simple serialization and deserialization program, but I am getting an error during deserialization, as segmentation fault(core dumped).
I am using '|' as a delimiter, to retrieve the data. I think I am making a mistake while putting the data back into the member variable.
I will be trying to send the data over a socket as the next step
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct Frame
{
    char p[MAX];
    char q[MAX];
    char r[MAX];
}frame;
void serial(char [] , frame*);
void deserial(char [], frame*); 
int main ()
{
    char buffer [MAX];
    int  i = 0;
    frame* packet1;
    frame* packet2;
    char temp[sizeof(frame)]; 
    strcpy(packet1->p, "1234");
    strcpy(packet1->q, "qwerty");
    strcpy(packet1->r, "abcdef");
    serial( temp, packet1);
    deserial( temp, packet2);
    return 0 ;
}
void serial ( char temp[], frame * packet1)
{
    char* p = temp;
    int len ;
    int i=0;
    len = strlen (packet1->p);
    while ( i<len)
    {
        *p = packet1->p[i];
         p++;
         i++;
    }   
    strcat(p,"|");
    p++;
    i  = 0;
    len = strlen (packet1->q);
    while ( i<len)
    {
        *p = packet1->q[i];
         p++;
         i++;
    }
    strcat(p,"|");
    p++;    
    i  = 0;
    len = strlen (packet1->r);
    while ( i<len)
    {
        *p = packet1->r[i];
         p++;
         i++;
    }
    strcat(p,"|");
    return;  
}
void deserial ( char temp[], frame *packet2)
{
    char *str = temp;
    int i= 0 ;
    char delimit[]="|";
    printf("\n");
    while (*str!='|')
    {
        printf ("%c\n", *str);
        packet2->p[i] = *str;  //error here
        str++;
        i++;
    }           
}
 
     
     
    