Page 246

4.3 M´as all´a de las matrices din´amicas

Acceso a argumentos de la l´ınea de comandos Los programas que dise˜ namos en el curso suponen que main no tiene par´ ametros. No siempre es as´ı. La funci´ on main puede recibir como argumentos las opciones que se indican en la l´ınea de comandos cuando ejecutas el programa desde la l´ınea de ´ ordenes Unix. El siguiente programa muestra por pantalla un saludo personalizado y debe llamarse as´ı: saluda -n nombre Aqu´ı tienes el c´ odigo fuente:

saluda.c 1 2

#include <stdio.h> #include <string.h>

3 4 5 6 7 8 9 10 11 12 13

main (int argc, char * argv []) { if (argc != 3) printf ("Error: necesito que indiques el nombre con -n\n"); else if (strcmp(argv [1], "-n") != 0) printf ("Error: s´ olo entiendo la opci´ on -n\n"); else printf ("Hola, %s.", argv [2]); }

El argumento argc indica cu´ antas ((palabras)) se han usado en la l´ınea de ´ ordenes. El argumento argv es un vector de char *, es decir, un vector de cadenas (una cadena es un vector de caracteres). El elemento argv [0] contiene el nombre del programa (en nuestro caso, "saluda") que es la primera ((palabra)), argv [1] el de la segunda (que esperamos que sea "-n") y argv [2] la tercera (el nombre de la persona a la que saludamos). La estructura argv , tras la invocaci´ on saluda -n nombre, es:

argv

0

s a l u d a \0

1

- n \0

2

n o m b r e \0

Ya podemos reservar memoria para el vector de cadenas, pero a´ un no para cada una de ellas: 1 2 3 4

char ** extrae_palabras(char frase[], int * numpals) { int i, lonfrase; char **palabras;

5

lonfrase = strlen(frase); *numpals = 1; for (i=0; i<lonfrase-1; i++) if (frase[i] == ’ ’ && frase[i+1] != ’ ’) (*numpals)++; if (frase[0] == ’ ’) (*numpals)--;

6 7 8 9 10 11

palabras = malloc(*numpals * sizeof (char *));

12 13

...

14 15

}

Ahora pasamos a reservar memoria para cada una de las palabras y, tan pronto hagamos cada reserva, ((escribirla)) en su porci´ on de memoria: 1

char ** extrae_palabras(char frase[], int * numpals)

240

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement