<P> UTF - 16 uses 2 - byte integers and as either byte may be zero (and in fact every other byte is, when representing ASCII text), cannot be stored in a null - terminated byte string . However, some languages implement a string of 16 - bit UTF - 16 characters, terminated by a 16 - bit NUL character . (Again the NUL character, which encodes as a single zero code unit, is the only character that cannot be stored . UTF - 16 does not have any alternative encoding of zero). </P> <P> Many attempts to make C string handling less error prone have been made . One strategy is to add safer functions such as strdup and strlcpy, whilst deprecating the use of unsafe functions such as gets . Another is to add an object - oriented wrapper around C strings so that only safe calls can be done . Neither has had a huge success as it is always possible and tempting to call the unsafe functions anyway . </P> <P> Most modern libraries replace C strings with a structure containing a 32 - bit or larger length value (far more than were ever considered for length - prefixed strings), and often add another pointer, a reference count, and even a NUL to speed up conversion back to a C string! Memory is far larger now, such that if the addition of 3 (or 16, or more) bytes to each string is a real problem the software will have to be dealing with so many small strings that some other storage method will save even more memory (for instance there may be so many duplicates that a hash table will use less memory). Examples include the C++ Standard Template Library std:: string, the Qt QString, the MFC CString, and the C - based implementation CFString from Core Foundation as well as its Objective - C sibling NSString from Foundation, both by Apple . More complex structures may also be used to store strings such as the rope . </P>

In c programming which one of the following is string termination character