C语言Segmentation fault (core dumped)

C语言 读取文本文件中的内容跳过#开头的注释后读取数据,把功能写成主函数能实现,作为功能函数在主函数里面调用就会出现Segmentation fault (core dumped)
函数如下:
void readPortInfo(const char* port_info)
{
FILE* fp = fopen(port_info, "r");
char* p = NULL;
fscanf(fp, "%c", p);
printf("test1 == %c\n", p);
while (strcmp(p, "#") == 0 || strcmp(p, "\n") ==0)
{
fscanf(fp, "%
[^\n]\n");
fscanf(fp, "%c", p);
printf("test2 == %c\n", p);
}
fscanf(fp, "%
[^\n]\n");

int a,b,c,d,e,f,g,h;

while (fscanf(fp, "%d %d %d %d %d %d %d %d",
    &a, &b, &c, &d, &e, &f, &g, &h) != EOF)
{
    printf("%d %d %d %d %d %d %d %d\n", a,b,c,d,e,f,g,h);
}

fclose(fp);
return;

}

int main()
{
readPortInfo("port_info");
return 0;
}

char* p = NULL;这是个空指针啊。怎么能用呢。要使用的话必须 malloc申请内存
但是看你代码的意思,你应该要定义字符变量 char p;

1、你要判断文件是否成功打开


    FILE *fp = fopen(port_info, "r");
    if(fp == NULL)
    {
        printf("open failed\n");
        return ;
    }

2、p需要申请空间

char p = 0;
    fscanf(fp, "%c", &p);

p指针需要分配内存空间才能使用,否则就是非法访问段错误了。 要是使用的内存不大,可以改成用数组,用指针的话必须先malloc分配内存才能用。
void readPortInfo(const char* port_info)
{
    FILE* fp = fopen(port_info, "r");
    if(fp == NULL)
        return;
    char c;
    fscanf(fp, "%c", &c);
    printf("test1 == %c\n", c);
    while (c=='#' || c=='\n')
    {
        fscanf(fp, "%[^\n]\n");
        fscanf(fp, "%c", &c);
        printf("test2 == %c\n", c);
    }
    fscanf(fp, "%[^\n]\n");

    int a,b,c,d,e,f,g,h;

    while (fscanf(fp, "%d %d %d %d %d %d %d %d",
        &a, &b, &c, &d, &e, &f, &g, &h) != EOF)
    {
        printf("%d %d %d %d %d %d %d %d\n", a,b,c,d,e,f,g,h);
    }

    fclose(fp);
    return;
}

int main()
{
    readPortInfo("port_info");
    return 0;
}