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;
}