When I dynamically allocate an array in C++, I use the following:
char* arr = new char[length];
So naturally, when I started learning C, I have been using the following to allocate my strings:
char* arr = malloc(sizeof(char[length]));
However, I see that common practice is to use the following instead:
char* arr = malloc(length * sizeof(char));
Are the statements above equivalent, or is there some reason I should not use sizeof(char[length])?
The two are effectively the same.
sizeof(char[length])evaluates to the size in bytes of an array ofcharof lengthlength. This is the same value aslength * sizeof(char).While the latter is more common, the former is fine as well. The only caveat is that some compilers, i.e. MSVC, don't support variable length arrays in which case
sizeof(char[length])would be invalid.