rc=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  if(rc==SQLITE_OK)
  {
  return 1;
  }
  else
  {
  return 0;
  }
  }
  int update_user(sqlite3*db,char**errmsg,char*name,char*toname)//修改密码
  {
  int rc;
  char sql[1024];
  sprintf(sql,"update user set name='%s'where name='%s'",toname,name);
  rc=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  if(rc==SQLITE_OK)
  {
  return 1;
  }
  else
  {
  return 0;
  }
  }
  int update_db_data(sqlite3*db,char**errmsg,char*name,char*toname)//修改密码
  {
  int rc1;
  int rc2;
  char sql[1024];
  sprintf(sql,"update data set name='%s'where name='%s'",toname,name);
  rc1=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  memset(sql,0,1024);
  sprintf(sql,"update data set toname='%s'where toname='%s'",toname,name);
  rc2=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  if(rc1==SQLITE_OK&&rc2==SQLITE_OK)
  {
  return 1;
  }
  else
  {
  return 0;
  }
  }
  int update_flag(sqlite3*db,char**errmsg,char*name,int flag)//禁言解禁操作
  {
  int rc;
  char sql[1024];
  sprintf(sql,"update online set flag=%d where name='%s'",flag,name);
  rc=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  if(rc==SQLITE_OK)
  {
  return 1;
  }
  else
  {
  return 0;
  }
  }
  int delete_user(sqlite3*db,char**errmsg,char*name)//注销用户
  {
  int rc;
  char sql[1024];
  sprintf(sql,"delete from user where name='%s'",name);
  rc=sqlite3_exec(db,sql,NULL,NULL,errmsg);
  if(rc==SQLITE_OK)
  {
  return 1;
  }
  else
  {
  return 0;
  }
  }
  void read_online_all(sqlite3*db,char**errmsg,vpChat temp)//向在线用户发送信息
  {
  int rc;
  sqlite3_stmt*stmt=NULL;
  rc=sqlite3_prepare(db,"select*from online",-1,&stmt,0);
  is_sqlite_ok(rc);
  rc=sqlite3_step(stmt);
  int userflag=1;
  while(rc==SQLITE_ROW)
  {
  my_strcpy(temp->msg,sqlite3_column_text(stmt,1));
  mywrite(temp);
  sleep(1); 
  rc=sqlite3_step(stmt);
  }
  }
  void read_data(sqlite3*db,char**errmsg,vpChat temp)//向在线用户发送信息
  {
  int rc;
  char name[80];
  char toname[80];
  sqlite3_stmt*stmt=NULL;
  rc=sqlite3_prepare(db,"select*from data",-1,&stmt,0);
  is_sqlite_ok(rc);
  rc=sqlite3_step(stmt);
  int userflag=1;
  while(rc==SQLITE_ROW)
  {
  my_strcpy(name,sqlite3_column_text(stmt,2));
  my_strcpy(toname,sqlite3_column_text(stmt,3));
  if( my_strcmp(temp->name,name)==0)
  {
  strcat(temp->msg,"你");
  strcat(temp->msg,"给");
  strcat(temp->msg,toname);
  strcat(temp->msg,"发了");
  strcat(temp->msg,sqlite3_column_text(stmt,4));
  strcat(temp->msg," ");
  my_strcpy(temp->time,sqlite3_column_text(stmt,1));
  mywrite(temp);
  memset(temp->msg,0,sizeof(temp->msg));
  sleep(1);  
  }
  if(my_strcmp(temp->name,toname)==0)
  {
  strcat(temp->msg,toname);
  strcat(temp->msg,"给你发了");
  strcat(temp->msg,sqlite3_column_text(stmt,4));
  strcat(temp->msg," ");
  my_strcpy(temp->time,sqlite3_column_text(stmt,1));
  mywrite(temp);
  memset(temp->msg,0,sizeof(temp->msg));
  sleep(1);  
  }
  rc=sqlite3_step(stmt);
  }
  }
  这个是数据库的各类操作呢!
  那么它的头文件估计也是函数申明
  void is_sqlite(int rc);//测试数据库
  void is_malloc_ok(vpChat*list);
  void is_sqlite_ok(int rc);
  void open_db(sqlite3**db);//打开数据库
  void creat_user_db(sqlite3*db,char**errmsg);//建立user数据表
  void creat_data_db(sqlite3*db,char**errmsg);//建立data数据表
  void creat_online_db(sqlite3*db,char**errmsg);//建立online数据表
  void creat_server_db(sqlite3*db,char**errmsg);//建立server数据表
  void insert_server_db(sqlite3*db,char*time,char**errmsg);
  void read_db_ok(sqlite3*db,char*errmsg,char*tablename);
  void delete_clean_db(sqlite3*db,char*tablename,char**errmsg);
  int read_online_fd(sqlite3*db,char**errmsg,char*user);
  int read_online_flag(sqlite3*db,char**errmsg,char*user);
  void write_online_all(sqlite3*db,char**errmsg,vpChat temp);
  int update_passwd(sqlite3*db,char**errmsg,char*name,char*passwd);
  void insert_data_db(sqlite3*db,char**errmsg,char*time,vpChat temp);
  int update_flag(sqlite3*db,char**errmsg,char*name,int flag);
  int delete_user(sqlite3*db,char**errmsg,char*name);
  void read_online_all(sqlite3*db,char**errmsg,vpChat temp);
  void read_data(sqlite3*db,char**errmsg,vpChat temp);
  int update_user(sqlite3*db,char**errmsg,char*name,char*toname);
  int update_db_data(sqlite3*db,char**errmsg,char*name,char*toname);
  干货来了,string.c
  很明显是我为了面试准备所写的函数!经测是有效的!
  #include"data.h"
  int my_strlen(const char*str)
  {
  int len;
  while(*str++!='')
  {
  len++;
  }
  return len;
  }
  int my_strcmp(const char*str1,const char*str2)
  {
  if(str1!=NULL&&str2!=NULL)
  {
  }
  else
  {
  return-2;
  }
  int i;
  while((*str1)!=''&&(*str2)!='')
  {
  if((*str1)==(*str2))
  {
  str1++;
  str2++;
  }
  else
  {
  break;
  }
  }
  if((*str1)==''&&(*str2)=='')
  {
  return 0;
  }
  else
  {
  return(*str1)>(*str2)?1:-1;
  }
  }
  char*my_strcpy(char*dest,const char*src)
  {
  if(dest!=NULL&&src!=NULL)
  {
  }
  else
  {
  return NULL;
  }
  char*adress=dest;
  while(((*dest++)=(*src++))!='');
  return adress;
  }
  int my_atoi(const char*str)
  {
  if(str!=NULL)
  {
  }
  else
  {
  return-1;
  }
  const char*p=str;
  int minus=0;
  long result=0;
  if(*p=='-')
  {
  minus=1;
  p++;
  }
  else if(*p=='+')
  {
  p++;
  }
  while(*p!='')
  {
  if(*p<'0'||*p>'9')
  {
  return-1;
  }
  result=result*10+((*p)-'0');
  p++;
  }
  minus=1?-result:result;
  return result;
  }
  char*my_strcat(char*dest,const char*src)
  {
  if(dest!=NULL&&src!=NULL)
  {
  }
  else
  {
  return NULL;
  }
  char*address=dest;
  while((*dest)!='')
  {
  dest++;
  }
  while(((*dest++)=(*src++))!='');
  return address;
  }
  CMD.c命令解析
  #include"data.h"
  int cmd_user(sqlite3*db,char**errmsg,vpChat temp,int sockfd)//用语判别用户信息
  {
  int flag;
  int sayflag;
  printf("cmd=%d ",temp->cmd);
  switch(temp->cmd)
  {
  case REG:
  {
  flag=read_user(db,errmsg,temp->name);
  if(flag==USERIN)
  {
  return REGNO;//注册重名
  }
  else
  {
  reg_db(db,errmsg,temp->name,temp->passwd);
  temp->flag=read_id(db,errmsg,temp->name);
  return REGOK;
  }
  break;
  }
  case LOG:
  {
  int flagpasswd;
  flag=read_online_ok(db,errmsg,temp->name);
  if(flag==ONLINEIN)
  {
  return ONLINEIN;
  }
  else
  {
  flagpasswd=read_pass(db,errmsg,temp->name,temp->passwd);
  if(flagpasswd==PASSWDOK)
  {
  log_db(db,errmsg,temp->name,sockfd);
  return PASSWDOK;
  }
  else
  {
  return PASSWDNO;
  }
  }
  break;
  }
  case LOGID:
  {
  int flagpasswd;
  read_id_name(db,errmsg,temp);//询问有无此用户
  flag=read_online_ok(db,errmsg,temp->name);
  if(flag==ONLINEIN)
  {
  return ONLINEIN;
  }
  else
  {
  flagpasswd=read_pass(db,errmsg,temp->name,temp->passwd);
  if(flagpasswd==PASSWDOK)
  {
  log_db(db,errmsg,temp->name,sockfd);
  return PASSWDOK;
  }
  else
  {
  return PASSWDNO;
  }
  }
  break;
  }
  case CHAT:
  {
  int tempfd;
  tempfd=read_online_fd(db,errmsg,temp->toname);
  if(tempfd==ONLINEOUT)
  {
  return ONLINEOUT;
  }
  else
  {
  sayflag=read_online_flag(db,errmsg,temp->name);
  if(sayflag==0)
  {
  return MYFLAGNO;
  }
  else
  {
  temp->flag=flag;
  temp->sockfd=tempfd;
  insert_data_db(db,errmsg,temp->time,temp);
  return CHATOK;
  }
  }
  break;
  }
  case ALL:
  {
  sayflag=read_online_flag(db,errmsg,temp->name);
  if(sayflag==0)
  {
  return MYFLAGNO;
  }
  else
  {
  insert_data_db(db,errmsg,temp->time,temp);
  return ALLOK;
  }
  break;
  }
  case SMILE:
  {
  sayflag=read_online_flag(db,errmsg,temp->name);
  if(sayflag==0)
  {
  return MYFLAGNO;
  }
  else
  {
  insert_data_db(db,errmsg,temp->time,temp);
  return SMILEOK;
  }
  break;
  }
  case WELCOME:
  {
  sayflag=read_online_flag(db,errmsg,temp->name);
  if(sayflag==0)
  {
  return MYFLAGNO;
  }
  else
  {
  insert_data_db(db,errmsg,temp->time,temp);
  return WELCOMEOK;
  }
  break;
  }
  case PASSWD:
  {
  flag=update_passwd(db,errmsg,temp->name,temp->passwd);
  return flag;
  break;
  }
  case BOOT:
  {
  int tempfd;
  tempfd=read_online_fd(db,errmsg,temp->toname);