Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


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


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 gasto   Members   -  Reputation: 302

Like
0Likes
Like

Posted 02 March 2014 - 10:23 PM

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.

Sponsor:

#2 King Mir   Members   -  Reputation: 2090

Like
7Likes
Like

Posted 02 March 2014 - 10:29 PM

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



#3 fastcall22   Crossbones+   -  Reputation: 5533

Like
0Likes
Like

Posted 02 March 2014 - 10:29 PM

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.
QWxsIHRvYXN0LXRvYXN0aW5nIHRvYXN0ZXJzIGNhbiB0b2FzdCB0b2FzdGVkIHRvYXN0LCBhbHRob3Vn aCByZS10b2FzdGluZyB0b2FzdGVkIHRvYXN0IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgYnkg dGhlIG1hbnVmYWN0dXJlcnMgb2YgdG9hc3QtdG9hc3RpbmcgdG9hc3RlcnMuLi4=

#4 tonemgub   Members   -  Reputation: 1797

Like
0Likes
Like

Posted 03 March 2014 - 01:55 AM

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).



#5 gasto   Members   -  Reputation: 302

Like
0Likes
Like

Posted 03 March 2014 - 06:57 PM

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.

#6 Aardvajk   Crossbones+   -  Reputation: 8742

Like
5Likes
Like

Posted 04 March 2014 - 02:21 AM

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.


Edited by Aardvajk, 04 March 2014 - 02:23 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS