En el monitor serie me aparece 51 en cada línea, 5 la primera vez que se envía el tamaño en el loop, y 1 cuando lo envía dentro de la función "myfunction". ¿Por qué pasa esto? ¿Cómo se utiliza sizeof() en una función propia? Muchas gracias!!
surbyte:
El error empieza en que mychar no esta definida.
Pensé que con hacer:
char mychar[]="abcde";
era suficiente. Digo... ¿no se supone que el compilador puede deducir la longitud en esa declaración?
Respecto a la duda: espero que hayas aprendido el porqué no se debe confiar ciegamente en sizeof cuando un array se le pasa por parámetro; y con mucha más razón si se hace a manera de puntero. En esos casos, solo hay tres soluciones:
Asumir o suponer la longitud. Esta es la menos recomendada si el programador no tiene sufciiente experiencia en el manejo de memoria.
Pasarle por parámetro la longitud del array (usualmente en forma de int). Es el método más utilizado en operaciones como comparación, lectura y escritura en bloques; tiene la gran desventaja de que no hay forma segura de verificar el valor de este parámetro, es completamente arbitrario y puede ser distinto de la longitud real de array.
Si la porción de memoria está destinada a almacenar cadenas de caracteres, se puede confiar CASI plenamente en strlen. Casi porque esta función arroja valores incorrectos si el terminador de cadenas ('\0') está ausente o mal ubicado.
definía el tamaño. Lo que me llama la atención es que sizeof() funciona sin problemas fuera de los void o en los de setup y loop, pero no en la función propia. Creo que tal como dices Lucario448 no se debe confiar ciegamente en sizeof(). Lo he probado con strlen y va sin problemas, gracias!!