The crc resetting to zero is a very good point! But where to reset it that could be transmitted and for the new one set to zero? At the end of this part in the sendToI2CUART() function?
crc = getCRC();
byte crcIndex = characters;
byte crcIndex2 = crcIndex++;
buffer[crcIndex] = crc >> 8; //store checksum in data array
buffer[crcIndex2] = crc;
For the c-strings I will take a look at it and try it, thanks!