C-阅读TXT文件时处理CRLF,CR和LF



i有一部分c代码,如下所示,在Linux GCC环境中遵守。

在我的项目中,我必须处理所有CRLF,CR和LF,读取从不同OS创建的TXT文件时。

我不确定fscanf()是否会自动处理所有情况。

还有其他方法可以处理所有情况吗?

while (fscanf(fp, "%d", &data) != EOF) 
{
    printf("%dn", data);
}

读取从不同OS创建的TXT文件时处理所有CRLF,CR和LF。

我不确定fscanf()是否会自动处理所有情况。

fscanf()的一些用法像fscanf(fp, "%d", &data)一样工作正常,但不是全部。

一个简单的选择是用您自己的my_fgets()读取输入的,然后致电sscanf()

char my_fgets(char *s, size_t sz, FILE *fp) {
  if (sz < 1) {
    return NULL;
  }
  char *org = s;
  bool no_input = true;
  int ch = 0;
  while (--sz > 0 && (ch = fgetc(fp)) != EOF) { 
    no_input = false; 
    if (ch == 'r') {
      int ch2 = fgetc(fp);
      if (ch2 != 'n') ungetc(ch2, fp);
      break;
    }
    if (ch == 'n') {
      break;
    }
    *s++ = ch;
  }
  *s = '';
  if ((ch == EOF) && (no_input || !feof(fp))) return NULL;
  return org;
} 
my_fgets(buffer, sizeof buffer, fp);
sscanf(buffer, ...);

这将处理大多数情况,如果文件以二进制或文本模式打开。


依靠文本模式和与系统相关的线路结束翻译不足,因为代码需要处理至少3个情况,其中一些情况可能与预期的系统依赖性线路结束不符。

相关内容

  • 没有找到相关文章

最新更新