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 of char of length length. This is the same value as length * 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With