在C中是多字符吗?

6 c ascii cross-platform newline eol

我读到\n由CR和LF组成.每个都有自己的ASCII码.

那么C中的\n是由单个字符表示还是多字符?

编辑:请指定你的答案,而不是简单地说"是,它是""不,它不是"

Dav*_*ley 20

在C程序中,它是一个单个字符,'\n'代表行尾.但是,某些操作系统(最明显的是Microsoft Windows)使用两个字符来表示文本文件中的行尾,这可能是混淆的地方.

CI/O函数负责在C表示'\n'和OS使用之间进行转换.

在C程序中,只需使用'\n'.保证是正确的.使用某种编辑器查看文本文件时,您可能会看到两个字符.当一个文本文件从Windows传输到一些基于Unix的系统时,你可能会"^M"在每一行的末尾出现,这很烦人,但与C无关.

  • +1正确的答案.注意:每个操作系统都有自己特定的EOL序列.CI/O运行时的责任是在'\n'和当前平台的EOL序列之间进行转换.注意:旧Mac使用'\ r'作为EOL序列.但在代码中它总是'\n' (2认同)
  • @Skumedel - 实际上,如果你想到它,除了*nix和Mac OS classic之外几乎所有东西都会使用\ r \n.查看示例的原始HTTP(或几乎所有基于文本的协议)标头. (2认同)

Chr*_*per 8

通常:'\n'是一个单个字符,表示换行符.'\r'是一个单个字符,表示回车.它们是它们自己的独立ASCII字符.

出现问题是因为在实际的文件表示中,基于UNIX的系统倾向于'\n'单独使用来表示您在键盘上点击"enter"或"return"时的想法,而Windows使用a '\r'直接跟随a '\n'.

在文件中:

"This is my UNIX file\nwhich spans two lines"
"This is my Windows file\r\nwhich spans two lines"
Run Code Online (Sandbox Code Playgroud)

当然,像所有二进制数据一样,这些字符都是关于解释的,并且该解释取决于使用数据的应用程序.当你制作C字符串时,坚持'\n',除非你想要一个文字回车,因为正如人们在评论中指出的那样,操作系统表示与你无关.IO库,包括C,应该自己处理它并将它抽象出来.

为了您的好奇心,以十进制表示,'\n'ASCII为10,'\r'为13,但请注意,这是ASCII标准,而不是C标准.

  • 当'\n'写入文件时,它将转换为特定于平台的EOL序列(如果文件处于文本模式).当文件被读回内存时,EOL序列将转换为字符'\n'.当文件保存在一个平台上并在另一个具有不同EOL序列的文件上使用时,会出现问题.在内存中,EOL总是'\n'.所以从技术上讲,你的字符串示例并不是100%准确,因为你应该提到这些是两个系统使用的文件格式. (3认同)

jde*_*aan 6

这取决于:

  • '\n' 是单个字符(ASCII LF)
  • "\n"是一个'\n'字符,后跟一个0终结符

一些I/O操作将转换'\n''\r\n'某些系统(CR-LF).