C语言基础中的语法问题

下面是我写的代码,是一个加密的过程,运行了几遍都有语法错误,请高手在空闲之余能帮我看下是哪里错了,万分感谢

#include<stdio.h>
#include<string.h>
void main()
{void m(*,int);
   char a[50],*p;
   int l;
   scanf("%s",a);
   l=strlen(a);
   p=a;
   m(p,l);
   printf("%s",a);
}
void m(*,int);
{   
    char n;
    for(int m=0;m<i;m++)
    {
        n=*p;
        if((int n)>=119)
            n=n-54;

        else
            n=n+4;
        *p=n;
       if(*p!='\0')
           p++

    };
}
#include <stdio.h>
#include <string.h>

void m(char *,int);

int main (void)
{
   char a[50],*p;
   int l;

   scanf ("%s",a);
   l = strlen(a);
   p = a;
   m (p,l);
   printf ("%s",a);

   return 0;
}

void m(char * p,int i)
{   
    char n;

    for(int m=0; m<i; m++)
    {
        n = *p;
        if(n >= 119)
            n = n-54;
        else
            n = n+4;
        *p = n;
       if(*p != '\0')
           p++;

    }
}

写函数头的时候和声明函数不一样,需注明形参变量名称
void m(char * p,int i)
就是这个p和i。