Sizeof string literal

c++, sizeof, string

Solution

- `sizeof("f")` must return 2, one for the 'f' and one for the terminating '\0'.

- `sizeof(foo)` returns 4 on a 32-bit machine and 8 on a 64-bit machine because foo is a pointer.

- `sizeof(bar)` returns 2 because bar is an array of two characters, the 'b' and the terminating '\0'.

The string literal has the type 'array of size N of `const char`' where N includes the terminal null.

Remember, arrays do not decay to pointers when passed to `sizeof`.

Problem

The following code ``` #include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof( "f" ) << endl; cout << "sizeof(const char* const) = " << sizeof( foo ) << endl; cout << "sizeof(const char[]) = " << sizeof( bar ) << endl; } ``` outputs ``` sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2 ``` on a 32bit OS, compiled with GCC. - Why does `sizeof` calculate the length of (the space needed for) the string literal ? - Does the string literal have a different type (from char* or char[]) when given to `sizeof` ?

Original source