Pointer to const char vs char array vs std::string

前端 未结 7 2038
不思量自难忘°
不思量自难忘° 2020-12-16 20:48

Here I\'ve two lines of code

const char * s1 = \"test\";
char s2 [] = \"test\";

Both lines of code have the same behavior, so I cannot see

7条回答
  •  臣服心动
    2020-12-16 21:19

    These two do not have the same behavior. s1 is a simple pointer which is initialized to point to some (usually read-only) area of the memory. s2, on the other hand, defines a local array of size 5, and fills it with a copy of this string.

    Formally, you are not allowed to modify s1, that is, do something like s1[0] = 'a'. In particular, under weird circumstances, it could cause all other "test"s in your program to become "aest", because they all share the same memory. This is the reason modern compilers yell when you write

    char* s = "test";
    

    On the other hand, modifying s2 is allowed, since it is a local copy.

    In other words, in the following example,

    const char* s1 = "test";
    const char* s2 = "test";
    char s3[] = "test";
    char s4[] = "test";
    

    s1 and s2 may very well point to the same address in memory, while s3 and s4 are two different copies of the same string, and reside in different areas of memory.

    If you're writing C++, use std::string unless you absolutely need an array of characters. If you need a modifiable array of characters, use char s[]. If you only need an immutable string, use const char*.

提交回复
热议问题