Wasn't printf supposed to stop at '\0' ?

Started by
4 comments, last by Aardvajk 10 years, 1 month ago

Wasn't printf supposed to output to the console until encountering the null character?

I forgot to assign the null character to the end of the string yet it printed out the C array nicely.

Intel Core 2 Quad CPU Q6600, 2.4 GHz. 3GB RAM. ATI Radeon HD 3400.
Advertisement

Uninitialized data is sometimes 0. It's chance. Don't rely on it.

Yes, because it is the nature of C-strings. It just so happens that at the very specific time you ran your program, there was a zero byte after your string. Run your program in a debugger and examine the memory around your string. Run it again, then manipulate the memory around the string such that it doesn't end in a zero byte.

Also, string constants already have a null-terminator, if that's what you assigned to the array you tested. You only have to add the null-terminator when you get the string from a source which provides non-null terminated strings (like functions that return a PASCAL-type strings, or an array and character count).

Also, string constants already have a null-terminator, if that's what you assigned to the array you tested. You only have to add the null-terminator when you get the string from a source which provides non-null terminated strings (like functions that return a PASCAL-type strings, or an array and character count).

Or I wrote the function myself assigning each character individually to each array index.

Intel Core 2 Quad CPU Q6600, 2.4 GHz. 3GB RAM. ATI Radeon HD 3400.

Someone better ask...

Any particular reason for using printf in a C++ program? I see C++ in the tags. One of the advantages of using std::string and std::cout is that you don't have to worry about this sort of thing, along with the type-safety the iostreams give you over printf's formatting strings.

15 years ago, I felt that null terminators were a big part of my life. I haven't had to think about them for many years.

This topic is closed to new replies.

Advertisement