【问题标题】:How can I determine if a char* is a windows line ending?如何确定 char* 是否是 Windows 行结尾?
【发布时间】:2019-09-26 18:06:28
【问题描述】:

在我的 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;

【问题讨论】:

  • "\r\n" 是两个字符。
  • Windows 行终止符是 两个 字符,而不是一个。 (而'\r\n'一个 整数,可能不等于所讨论的两个字符。)
  • 我建议做temp &gt;= 'A',其余的也类似。当其他人(包括您在未来某个日期)查看代码时,这将使您的代码的意图更加清晰。
  • windows 行尾如何影响代码的结果?在大多数情况下,这无关紧要。
  • 提示:不要使用幻数:65 -> 'A', 90 -> 'Z'

标签: c windows newline carriage-return


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2014-08-18
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多