C语言从文件中获取IP字段,大家来看看这程序还有什么有关问题没

C语言从文件中获取IP字段,大家来看看这程序还有什么问题没?
/*程序功能:获取配置文件中的IP字符串
  程序目的:记录下来,免得以后重写了,不如意地方以后再改*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

int etc_file(char *file,char *buffer);//读取配置文件
int cut_ip(char *,char **);//分割并获取对应IP地址

int main()
{
  char *buffer;
  char **p;
  int i;
  buffer = (char *)malloc(1000);
  p = (char **)malloc(sizeof(char *)*20);
  /*分配二维指针空间*/
  for(i=0;i<20;i++)
  {
  p[i] = (char *)malloc(sizeof(char)*16);
  if(p[i] == NULL)
  {
  printf("分配内存失败!\n");
  exit(0);
  }
  }
  char *file = "a.txt";
  if(etc_file(file,buffer))
  {
  buffer[strlen(buffer) - 2] = 0;
  printf("ip str = %s\n",buffer);
  if(!cut_ip(buffer,p))
  {
  /*do something*/
  }
  }
   
  /*释放指针内存*/
  for(i = 19; i > 1; i--)
  {
  free(p[i]);
  }
  free(p);

  free(buffer);
  return 0;
}

int etc_file(char *file,char *buffer)
{
  FILE *fd;
  fd = fopen(file,"rb");
  if(fd != NULL)
  {
  while(1)
  {  
  if(fgets(buffer,1000,fd))
  {
  char *s;
  if((s = strstr(buffer,"host")))
  {
  strcpy(buffer,s+6);
  return 1;
  }
  }
  else
  break;
  }
  }

  return 0;
}

int cut_ip(char * str,char **p)
{
  int i = 0,count = 0;
  while(*(str + i) != '\0')
  {
  int j = 0 ,len = 0;
  while((*(str + i +j) != ',') && (*(str + i +j) != '\0'))
  {
  *(*p + len) = *(str + i + j);
  len++;
  j++;
  }
  *(*p + len) = 0;
  printf("p[%d] = %s\n",++count,*p);
  *p++;
  i = i + j + 1;
  if(*(str +i -1) == '\0')
  break;
  }
  return 0;
}

a.txt内容如下:
name="chenqin","jian"
host="192.168.137.1,192.168.137.2,192.168.137.123,192.168.137.35"

------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。

------解决方案--------------------
都是些字符串处理,跟赵老师学习。。单补,打印变量等一些手段很好调试出来的。。。