簡體   English   中英

以 Null 結尾的字符串的“NULL”或“\0”符號是否存儲在文件中?

[英]Is the “NULL” or “\0”-sign, of a Null-terminated string, stored in a file?

如果我想將一個以 Null 結尾的字符串存儲到一個文件中,並且該文件將只包含該字符串,那么文件中存儲的“\0”或“NULL”字符(在“EOF”之前(文件結束) -符號)?

此外:結果是否取決於操作系統等編譯器,我將在哪個編譯器上編譯源代碼?

您可能可以將 null 字符寫入文本文件,但您幾乎肯定不想這樣做。

字符串(定義為“由第一個 null 字符終止並包括在內的連續字符序列”)是一種內存數據格式。

文本 stream由一系列組成:

文本 stream 是組成為的有序字符序列,每行由零個或多個字符加上一個終止換行符組成。 最后一行是否需要終止換行符是實現定義的。

字符串可能包含也可能不包含單行文本。 如果它代表一行文本,它可能包含也可能不包含終止換行符'\n'字符(您需要自己跟蹤)。

如果您在 memory 中有一個字符串序列,將它們寫入文本文件的通常方法是將每個字符串的內容(不包括終止 null 字符)寫入文件,必要時添加換行符。 fprintffputs等函數假定它們的 arguments 是字符串,因此它們會注意省略'\0'

可以將 null 字符寫入文本 stream,但它是由實現定義的,實際寫入文件的內容。 您可以將 null 字符或任何字節值寫入二進制 stream - 但是您不能安全地使用字符串函數( strlen()等人,甚至fgets()fputs() )寫入或從 stream 讀取。 (實際上,大多數系統允許在文本文件中寫入和讀取 null 字符——盡管許多標准庫函數假定文本文件只包含可打印字符。)

'\0'不是打印字符,所以如果您在文本模式下使用 io stream,那么當您通過這種 ZF7B44CFAFD5C52223D7498196C8A2 將其寫入文件時是否會保留它。

7.21.2p2

文本 stream 是組成行的有序字符序列,每行由零個或多個字符加上一個終止換行符組成。 最后一行是否需要終止換行符是實現定義的。 可能必須在輸入和 output 上添加、更改或刪除字符,以符合在主機環境中表示文本的不同約定。 因此,stream 中的字符與外部表示中的字符之間不需要一一對應。 從文本 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 讀入的數據必須與之前寫入該 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 的數據比較等於: 數據僅包含打印字符和控制字符水平制表符和換行符; 空格字符前面沒有換行符; 最后一個字符是換行符。 讀入時是否出現在換行符之前立即寫出的空格字符是實現定義的。

如果您通過二進制 stream 將'\0'寫入文件(使用例如fopen("file","wb")的文件),例如使用fputc('\0',f)fwrite("",1,1,f) ,您應該能夠將其取回。

不,將字符串寫入文件的函數將不包括終止 null。 您可以使用需要字節計數的 function 將 null 寫入文件,但這沒有意義,因為沒有相應的讀取 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM