Why am I missing last 16 bytes with serial communication?

Zero indexed arrays are arrays which first element is the zeroth element. You start counting with zero.

int length = 5;
int arr[length];

arr[0] = 3;         //*arr = 3;
arr[1] = 4;         //*(arr+1) = 4;
//...
arr[length-1] = 1;        //*(arr+length - 1) = 1;

As you can see, arr is a pointer to a memory location where the array starts. So if you want to have the first element, you need the memory location arr with no offset, or in other words, you add zero to it. You want the second element, you add 1 to arr, and you get to the memory location of the next element.

I tried to explain it in my own words, since I have no theoretical info or examples. You start counting with zero, not with one.