Потому что вы не можете передавать целые массивы как параметры функции в C. На самом деле вы передаете указатель на него; скобки синтаксические сахара. Нет никаких гарантий, что массив, на который вы указываете, имеет размер 8, так как вы можете передать этой функции любой символьный указатель, какой захотите.
// These all do the same thing
void foo(char cvalue[8])
void foo(char cvalue[])
void foo(char *cvalue)