如何确定char *是否是Windows行的结尾?

0 c windows newline carriage-return

在我的C程序中,我正在逐个字符地查找文件以获取信息。由于某种原因,即使我的代码看起来像下面那样,我的数据也正在获取Windows行尾字符。

我尝试了一些类似temp [0] =='\ r \ n'的操作

while((temp = fgetc(file)) != EOF)
    {
    if((temp>=65 && temp<=90) || (temp>=97 && temp<=122) || (temp>=48 && temp<=57) || temp==39){
      c[count]=temp;
      count++;
    }
else
      break;
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 5

Windows行尾由两个单独的字符组成,回车符('\r')后跟换行符('\n')。因为它们是两个字符的组合,所以无法一次只看一个字符就无法检测到它们。

如果您的代码 Windows 上运行并且该文件应被解释为文本,请以文本模式(例如"r"而不是"rb")打开它,并且行终止符应自动转换为单个换行符。如果您正在使用单个换行符作为行终止符的系统上运行(如今,除了 Windows以外,几乎都没有其他功能),则不会执行此类转换。在这种情况下,要检测Windows样式的行终止符,您需要跟踪前一个字符是否为'\r'。如果是这样,并且下一个读取的字符是'\n',那么您已经检测到行终止符。

但是,如果将Windows样式的终止符放在文件中被认为是错误的,则可以考虑通过dos2unix或类似的实用工具修复文件。