Past paper question from 2007:
Source University of Cape Town - CSC2001F - 2007

Which of the two statements shown below will provide an lexicographical (alphabetic) string comparsion?

char *mesg1 = "Hello", *mesg2 = "world";
string s1 = "Hello", s2 = "world";
if (s1 != s2) {...} // statement 1
if (mesg1 != mesg2 ) {...} // statement 2

I thought both of these would provide alphabetic string comparison... But I guess I'm wrong.. What would be the correct answer

6 Years
Discussion Span
Last Post by thelamb

Not true. In the second if statement you are effectively performing a comparison of the pointer, not the content.

The string comparison will, on the other hand, give you a comparison of the content. You could use std::lexicographical_compare to compare a char array though.

Edited by Ketsuekiame: n/a


okay so if you're performing a comparison of the pointer then why does

char *a = "Hello";
char *b = "Hello";

if(a == b)
cout << "EQUAL";

and the output prints


also writing:

cout << a

prints out


Because the compiler does some optimisation for you. Because you've defined two strings and you haven't changed them, the compiler assumes they are constant and assigns the same pointer address. This saves memory as instead of 2 * 6 bytes it's only 1*6 bytes.

Your if statement then effectively sees if(a == a)

Edited by Ketsuekiame: n/a


Your result is compiler (option) specific.
You're probably compiling with "Optimize for speed (O2)", if you remove this option you will probably not see EQUAL being printed (at least not with my compiler).
So try to compile with different options, and print the addresses of a and b ;).

In any case, it really makes sense that you are comparing pointers, after all.. a and b _are_ pointers, and you are comparing them... there is no reason for the compiler to care about what a and b point to in the comparison.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.