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

时间:2019-05-08 23:38:26

标签: 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;

1 个答案:

答案 0 :(得分:5)

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

如果您的代码正在Windows上运行,并且文件应被解释为文本,请以文本模式打开文件(例如,用"r"而不是"rb" ),并且行终止符应自动转换为单个换行符。如果您正在使用单个换行符作为行终止符的系统上运行(这些天大多数都是Windows,而则是Windows),那么将不会执行此类转换。在这种情况下,要检测Windows样式的行终止符,您需要跟踪前一个字符是否为'\r'。如果是这样,并且下一个读取的字符是'\n',则说明您已检测到行终止符。

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