Проблемы при разборе файла строка за строкой в C

#c

Вопрос:

Я разрабатывал простой лексический анализатор на языке Си, код для которого приведен ниже.

 int isOperator(char str) {  if(str == ' ' || str == '-' || str == '*' || str == '/' || str == '=')  return 1;  return 0; } char *subString(char *str, int k, int j) {  int i = 0;  char *subStr =(char*)malloc(sizeof(char) * (k - j   2));  while(k lt;= j)  {  subStr[i  ] = str[k  ];   }  subStr[k] = '';  return subStr; } int identify(char *str, int k) {  int j = k, len, i;  while(str[j] != ' ' amp;amp; str[j] != '')  {  j  ;  }  char *subStr = subString(str, k, j - 1);  if(!strcmp(subStr, "int") || !strcmp(subStr, "while") || !strcmp(subStr, "float") || !strcmp(subStr, "for"))  {  printf("%s (Keyword)n", subStr);  return (j - k);  }  else  { len = strlen(subStr);  for(i = 0; i lt; len; i  )  if(!isdigit(subStr[i]))  {  printf("%s (Identifier)n", subStr);  return (j - k);  }  printf("%s (Integer)n", subStr);  return (j - k);  }  return 0; } void analyzeTokens(char *str) {  int i = 0;  while(i lt; strlen(str))  {  if(str[i] == ' ')  i  ;  else if(isOperator(str[i]))  {  printf("%c (Operator)n", str[i]);  i  ;  }  else  {  i = i   identify(str, i)   1;  }  } } void main() {  char *buffer, *subStr;  char buff[255];  int len, temp;  size_t buffsize = 0;  ssize_t read;  FILE *fp;  fp = fopen("~/lexin.txt", "r");  if(fp == NULL)  printf("File does not exists");  else  {  while((read = getline(amp;buffer, amp;buffsize, fp)) != -1)  {  printf("nParsing line %sn", buffer);  analyzeTokens(buffer);  }  } }  

Если я напрямую предоставляю анализируемый текст вместо чтения из .txt файла, вывод отображается как ожидалось, но проблема возникает, когда я читаю несколько строк из файла. Вывод, когда я читаю из файла lexin.txt , выглядит следующим образом

 Parsing line int a = b   4  int (Keyword) a (Identifier) = (Operator) b (Identifier)   (Operator) 4  (Identifier)  Parsing line a = b * 3 a (Identifier) = (Operator) b (Identifier) * (Operator) 3 (Integer)  

lexin.txt

 int a = b   4 a = b * 3  

Каждая строка за вычетом последней анализируется неправильно ( 4 помечены как идентификатор ) со странной новой строкой, разделяющей 4 и (Identifier) . Я убедился, что файл не содержит ненужных пробелов и вкладок. Мы будем признательны за любую помощь в решении этой проблемы.