如果我要将以Null结尾的字符串存储到文件中,并且该文件仅包含该字符串,则是文件中存储的“ \ 0”或“ NULL”字符(在“ EOF”之前(结束文件)签名)?
此外:结果是否取决于操作系统以及我将在其上编译源代码的编译器?
答案 0 :(得分:3)
您也许可以将空字符写入文本文件,但几乎可以肯定不愿意。
字符串(定义为“以第一个空字符结尾并包括第一个空字符的连续字符序列”)是一种内存中数据格式。
文本流由一系列行组成:
文本流是由字符组成的有序序列 lines ,每行包含零个或多个字符以及一个换行符。最后一行是否需要 终止换行符是实现定义的。
一个字符串可能包含也可能不包含一行文本。如果它代表一行文本,则可能包含或可能不包含换行符'\n'
(您需要自己对其进行跟踪)。
如果内存中有一系列字符串,通常将它们写入文本文件的方法是将每个字符串的内容(不包括终止空字符)写入文件,必要时添加换行符。像fprintf
和fputs
这样的函数假定它们的参数是 strings ,因此它们要忽略'\0'
。
您可以 向文本流中写入一个空字符,但这是实现定义的内容,它将实际写入文件中。您可以向二进制流中写入空字符或任何字节值-但随后就不能安全地使用字符串函数(strlen()
等,甚至fgets()
和fputs()
)上写入或读取流的数据。 (实际上,大多数系统允许将空字符写入文本文件或从文本文件中读取空字符,尽管许多标准库函数都假定文本文件仅包含可打印字符。)
答案 1 :(得分:2)
'\0'
不是打印字符,因此,如果在文本模式下使用io流,那么通过这种流将io流写入文件时是否保留它取决于实现。
文本流是由字符组成的有序序列 行,每行由零个或多个字符加一个 终止换行符。最后一行是否需要 终止换行符是实现定义的。性格 可能必须在输入和输出到以下位置时添加,更改或删除 符合用于在主机中表示文本的不同约定 环境。因此,不需要一一对应 在流中的字符和外部字符之间 表示。从文本流读取的数据将必然 比较等于之前写入该流的数据 仅在以下情况下:数据仅包含打印字符和控件 字符水平制表符和换行符;没有换行符 在紧跟空格字符之前;最后一个字符是 换行符。是否写出空格字符 读入时换行符出现之前 实现定义的。
如果通过二进制流(例如,用'\0'
或fopen("file","wb")
通过二进制流(将fputc('\0',f)
写入文件),则应该能够取回它。
答案 2 :(得分:1)
否,将字符串写入文件的函数将不包含终止null。您可以使用需要字节计数的函数将null写入文件,但这没有任何意义,因为没有相应的读取函数。