为什么这段代码给出了不可读的第一行?

时间:2017-07-30 09:30:48

标签: c arrays split

此代码读取文件并将其拆分为数组,以便将行元素相互比较。 它给我作为第一行的问题

 )�H�       2382    2382

我认为函数char **linecontent(char *line)是问题,但我是C的新手,我尝试了所有可能的解决方案而我什么也没有。 我很抱歉。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char** split(char string[],const char seps[])
{
  char ** res  = NULL;
  char *  p    = strtok(string, seps);
  int n_spaces = 0, i;
  while (p) {
    res = realloc(res, sizeof (char*) * ++n_spaces);
    if (res == NULL) {
      exit(-1); /* memory allocation failed */
    }
    res[n_spaces-1] = p;
    p = strtok(NULL, seps);
  }
  res = realloc(res, sizeof (char*) * (n_spaces+1));
  res[n_spaces] = '\0';
  return res;
  free(res);
}

char** readfile(char *name, int *lsize)
{
  FILE *fp;
  char *result;
  char line[500];
  char *pline = NULL;
  char **lines = NULL;
  int i = 0; 
  int l = 0;

  fp = fopen(name, "r");
  while (fgets(line,500, fp)) {
    i++;

    pline = strdup(line);  

    lines = (char**)realloc(lines, sizeof (char**) * (++l));
    /* Add to lines */
    lines[l-1] = pline; 
    *lsize += 1;   
    pline = NULL; 
  }
  fclose(fp);
  return lines;
}

char** linecontent(char *line)
{
  char **linecont;          
  char hit[300];
  strncpy(hit, line, sizeof(hit) - 1);
  hit[sizeof(hit) - 1] = '\0';
  linecont = split(hit, "\t");
  return linecont;             
}

int main()
{
  char **lines = NULL;

  int lsize = 0;
  lines = readfile("TEMP", &lsize);
  int i = 0;

  while (i != lsize) {
    char **linecont1;
    char *thisline=lines[i]; 
    linecont1=linecontent(thisline);
    char *pname1 = linecont1[0];
    char *acc1 = linecont1[1];
    int start1 = atoi(linecont1[3]);
    int  miss1 = atoi(linecont1[4]); 
    printf("%s\t%s\t%d\t%d\n", pname1, acc1, start1, start1);
    i++;
  }
}

0 个答案:

没有答案