简体   繁体   中英

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

If i want to store a Null-terminated string into a file, and the file will only containing that string, is the "\0" or "NULL"-character stored in the file (before the "EOF" (End of File)-sign)?

Furthermore: Is the result depended from the operation system and so on the compiler, on which i will compile the source code on?

You might be able to write null characters to a text file, but you almost certainly don't want to.

A string (defined as "a contiguous sequence of characters terminated by and including the first null character") is an in-memory data format.

A text stream consists of a sequence of lines :

A text stream is an ordered sequence of characters composed into lines , each line consisting of zero or more characters plus a terminating new-line character. Whether the last line requires a terminating new-line character is implementation-defined.

A string may or may not contain a single line of text. If it represents a line of text, it may or may not include the terminating new-line '\n' character (you'll need to keep track of that yourself).

If you have a sequence of strings in memory, the usual way to write them to a text file is to write the contents of each string, not including the terminating null character , to the file, adding a new-line character if necessary. Functions like fprintf and fputs assume their arguments are strings , so they take care of omitting the '\0' .

You can write a null character to a text stream, but it's implementation-defined what will actually be written to the file. You can write a null character, or any byte value, to a binary stream -- but then you can't safely use string functions ( strlen() et al, or even fgets() and fputs() ) on data written to or read from the stream. (And in practice, most systems allow null characters to be written to and read from text files -- though a number of standard library functions assume that text files contain only printable characters.)

'\0' is not a printing character so if you use an io stream in text mode, then whether it will be preserved when you write it to a file through such a stream is implementation-dependent.

7.21.2p2

A text stream is an ordered sequence of characters composed into lines, each line consisting of zero or more characters plus a terminating new-line character. Whether the last line requires a terminating new-line character is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to differing conventions for representing text in the host environment. Thus, there need not be a one- to-one correspondence between the characters in a stream and those in the external representation. Data read in from a text stream will necessarily compare equal to the data that were earlier written out to that stream only if: the data consist only of printing characters and the control characters horizontal tab and new-line; no new-line character is immediately preceded by space characters; and the last character is a new-line character. Whether space characters that are written out immediately before a new-line character appear when read in is implementation-defined.

If you write the '\0' to a file through a binary stream (one opened with eg, fopen("file","wb") ), eg, with fputc('\0',f) or fwrite("",1,1,f) , you should be able to get it back.

No, the functions that write a string to a file will not include the terminating null. You can write a null to a file using a function that takes a byte count, but that doesn't make sense because there's no corresponding read function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM