String literals are const

String literals are const

According to the C++ standard, the following line is illegal:

 char *s = "hello world"; //illegal

Though still supported by many compilers, it’s deprecated and should be avoided. The reason is that the literal “hello world” is a constant. Storing it in a non-const array of characters is an error, since it may lead to the following bug:

 strcpy(s, "ab"); //OOPS! undefined behavior. attempt to modify a const object. 

The correct form is:

 const char *s = "hello world"; //now fine

And as a result, the compiler can detect the bug:

 strcpy(s, "abc"); //now a compile-time error: strcpy's first argument should be a non-const char*


Share the Post: