Both are distinctly different, For a start:
- The First creates a pointer.
- The second creates an array.
Read on for more detailed explanation:
The Array version:
char text[] = "text";
Creates an array that is large enough to hold the string literal "text", including its NULL
terminator. The array text
is initialized with the string literal "text".The array can be modified at a later time. Also, the array's size is known even at compile time, so sizeof
operator can be used to determine its size.
The pointer version:
char *text = "text";
Creates a pointer to point to a string literal "text". This is faster than the array version, but string pointed by the pointer should not be changed, because it is located in an read only implementation defined memory. Modifying such an string literal results in Undefined Behavior.
In fact C++03 deprecates use of string literal without the const
keyword. So the declaration should be:
const char*text = "text";
Also,you need to use the strlen()
function, and not sizeof
to find size of the string since the sizeof
operator will just give you the size of the pointer variable.
Which version is better?
Depends on the Usage.
- If you do not need to make any changes to the string, use the pointer version.
- If you intend to change the data, use the array version.
EDIT: It was just brought to my notice(in comments) that the OP seeks difference between:
const char text[]
and const char* text
Well the above differing points still apply except the one regarding modifying the string literal. With the const
qualifier the array test
is now an array containing elements of the type const char
which implies they cannot be modified.
Given that, I would choose the array version over the pointer version because the pointer can be(by mistake)easily reseated to another pointer and the string could be modified through that another pointer resulting in an UB.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…