Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does sending a character pointer - initialized to '\0' - to the standard output fault it? (C++)

Tags:

c++

c++11

This is trivial, probably silly, but I need to understand what state cout is left in after you try to print the contents of a character pointer initialized to '\0' (or 0). Take a look at the following snippet:

const char* str;
str = 0; // or str = '\0';
cout << str << endl;
cout << "Welcome" << endl;

On the code snippet above, line 4 wont print "Welcome" to the console after the attempt to print str on line 3. Is there some behavior I should be aware of? If I substitute line 1-3 with cout << '\0' << endl; the message "Welcome" on the following line will be successfully printed to the console.

NOTE: Line 4 just silently fails to print. No warning or error message or anything (at least not using MinGW(g++) compiler). It spewed an exception when I compiled the same code using MS cl compiler.

EDIT: To dispel the notion that the code fails only when you assign str to '\0', I modified the code to assign to 0 - which was previously commented

like image 784
John Gathogo Avatar asked Nov 27 '22 22:11

John Gathogo


1 Answers

If you insert a const char* value to a standard stream (basic_ostream<>), it is required that it not be null. Since str is null you violate this requirement and the behavior is undefined.

The relevant paragraph in the standard is at §27.7.3.6.4/3.

The reason it works with '\0' directly is because '\0' is a char, so no requirements are broken. However, Potatoswatter has convinced me that printing this character out is effectively implementation-defined, so what you see might not quite be what you want (that is, perform your own checks!).

like image 75
GManNickG Avatar answered Nov 30 '22 23:11

GManNickG