Page 101

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

2 Estructuras de datos en C: vectores est´aticos y registros

una direcci´ on de memoria y el identificador, por la dualidad vector-puntero, ¡es una direcci´on de memoria! Recuerda: cadena[0] es un char, pero cadena, sin m´as, es la direcci´on de memoria en la que empieza el vector de caracteres. Ejecutemos el programa e introduzcamos una palabra: 

una La cadena le´ ıda es una

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 99 ¿Es v´ alida esta otra forma de leer una cadena? Pru´ebala en tu ordenador. 1

#include <stdio.h>

2 3

#define MAXLON 80

4 5 6 7

int main(void) { char cadena[MAXLON+1];

8

scanf ("%s", &cadena[0] ); printf ("La cadena le´ ıda es %s.\n", cadena);

9 10 11

return 0;

12 13

}

............................................................................................. Cuando scanf recibe el valor asociado a cadena, recibe una direcci´on de memoria y, a partir de ella, deja los caracteres le´ıdos de teclado. Debes tener en cuenta que si los caracteres le´ıdos exceden la capacidad de la cadena, se producir´a un error de ejecuci´on. ¿Y por qu´e printf no muestra por pantalla una simple direcci´on de memoria cuando ejecutamos la llamada printf ("La cadena le´ ıda es \%s.\n", cadena)? Si es cierto lo dicho, cadena es una direcci´ on de memoria. La explicaci´on es que la marca %s es interpretada por printf como ((me pasan una direcci´ on de memoria en la que empieza una cadena, as´ı que he de mostrar su contenido car´ acter a car´ acter hasta encontrar un car´acter nulo)). Lectura con gets Hay un problema pr´ actico con scanf : s´ olo lee una ((palabra)), es decir, una secuencia de caracteres no blancos. Hagamos la prueba: lee frase mal.c 1

E lee frase mal.c E

#include <stdio.h>

2 3

#define MAXLON 80

4 5 6 7

int main(void) { char cadena[MAXLON+1];

8

scanf ("%s", cadena); printf ("La cadena le´ ıda es %s.\n", cadena);

9 10 11

return 0;

12 13

}

Si al ejecutar el programa tecleamos un par de palabras, s´olo se muestra la primera: una frase La cadena le´ ıda es una.

¿Qu´e ha ocurrido con los restantes caracteres tecleados? ¡Est´an a la espera de ser le´ıdos! La siguiente cadena le´ıda, si hubiera un nuevo scanf , ser´ıa "frase". Si es lo que quer´ıamos, perfecto, pero si no, el desastre puede ser may´ usculo. Introducci´ on a la Programaci´ on con C

95

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement