Cita: Si gracias, eso ya lo sé, pero el problema es que cuando paso el array a otra función, y le hago un sizeof me devuelve 4, es decir, el tamaño de un char solo.
En realidad 4 bytes es el tamaño que ocupa el puntero en memoria y no el tamaño de un char, lo que sucede aquí es que cuando pasas el arreglo a una función este es tratado como un puntero (independientemente de la notación que utilices en el header de la función, esto es, puede ser (char *p) ó (char p[]) por ejemplo), de esta forma siempre que utilices sizeof p dentro de la función obtendrás el tamaño de un char* y no el tamaño del arreglo de caracteres. Puedes utilizar un segundo parámetro en la función que especifique el tamaño del arreglo, por ejemplo:
Código:
void myfunc(char *array, int size); // declaración
myfunc(myarray, sizeof myarray/sizeof myarray[0]); // llamada de la función
Salu2.