sizeof () возвращает размер фактического типа переменной. Таким образом, когда вы определяете свой тип как char *, он возвращает размер указателя.
Но если вы сделали свою переменную массивом, sizeof вернет размер самого массива, который будет делать то, что вы хочу:
char *ptr = "moo to you";
char arr[] = "moo to you";
assert(sizeof(ptr) == 4); // assuming 32 bit
assert(sizeof(arr) == 11); // sizeof array includes terminating NUL
assert(strlen(arr) == 10); // strlen does not include terminating NUL