Pitfall of C++ string for Java programmers

Yesterday, I saw a young colleague struggle with C++ string, so I decided to take a look to see what was going on. He was more familiar with Java than with C++. He was creating a string, and it didn’t come out exactly the way he wanted. The code looked similar to the following:

  1. string str("This is a test" + 2);
  2. std::out << "’" << str1 << "’" << std::endl;

It always displayed:

'is is a test'

And not the way he wanted, which should be:

'This is a test2'

This is very understandable, as he came from Java background, where the following Java code:

  1. String str = "This is a test" + 2;
  2. System.out.println("’" + str + "’");

would have produced exactly the result he wanted.

The C++ code above does not concatenate two strings to form a new string. In fact, it is a pointer arithmetic. One I changed his code to the following, it was much clearer:

  1. const char *ptr = "This is a test";
  2. std::string str1(ptr + 2);
  3. std::cout << "’" << str1 << "’" << std::endl;

For him, pointer arithmetic is obvious now. It was not the first time someone fell into this pitfall, and unfortunately, it won’t be the last either.

Leave a Reply

*


Switch to our mobile site