Pages: [1]   Go Down
Author Topic: funcion que recibe array & sizeof()  (Read 779 times)
0 Members and 1 Guest are viewing this topic.
Malaga
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, tengo un par de problemas. Por mucho que le doy vueltas no lo entiendo, a ver si me podéis explicar...

El código:

Code:
void setup()
{
Serial.begin(9600);
}

void hacerFrase(char frase[])
{
    Serial.println(sizeof(frase));
    for(int i = 0; i <= sizeof(frase); i++)
    {
      Serial.println(frase[i]);
      delay(500);
    }
}

void loop()
{
  char frase[] = "hipeople";
  hacerFrase(frase);
  Serial.println(sizeof(frase));
}

Vale, en este código hay dos cosas que se me escapan. La primera tiene que ver con la función. Le envío una matriz de 8 posiciones. Por que al escribir por consola, hace como que la matriz es de 3 posiciones? si después al salir de la función revisa la matriz y da 9??

Y la segunda es porque la función sizeof() siempre me devuelve el valor igual del tamaño del array + 1? osea, que sentido tiene esto? lo pregunto porque lo mismo me esta devolviendo el significado de otra cosa y no me doy cuenta... :S

este es el resultado en consola que me da, por si os da pereza comprobarlo, es:

Code:
2
h
i
p
9

y así en un bucle infinito, como es obvio.
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 721
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
sizeof(frase) te da la longitud total de la variable (no de la frase), que en tu caso contiene la frase mas un '\0' carácter nulo final. Pero podría ser una variable de longitud 100 que tiene una frase de 8 caracteres.

Para obtener la longitud de la frase tienes que usar strlen(frase). Y para recorrer la frase la condición es "i < strlen(frase)"
Code:
void hacerFrase(char frase[])
{
    Serial.println(strlen(frase));
    for(int i = 0; i < strlen(frase); i++)
    {
      Serial.print(frase[i]);
      delay(500);
    }
}
Logged

Malaga
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dios, no me esperaba una respuesta tan rápida, gracias! ahora aprovecharé toda la mañana ^^

De acuerdo, es que miré en la referencia extendida de la web, y no encontré esa función, vi la de sizeof() que era la que creía que era la que necesitaba. Ya se me fueron las dudas, muchas gracias!
Logged

Pages: [1]   Go Up
Jump to: