/* argv.c * * Neal Nelson 2009.10.05 * * Construct a NULL terminated argv array of strings from an input line. */ #include #include #include #define MAXLINE 81 #define MAXARGV 5 /* Prototypes */ char **mkargv(char *buf); main() { char buf[MAXLINE]; char **argv, **p; printf("mkArgv: enter words on a line, ^d to quit\n>"); while (fgets(buf, MAXLINE, stdin) != NULL ) { argv = mkargv(buf); printf("Contents of argv string array:\n"); for (p = argv; *p != NULL; p++) printf(" %s\n",*p); printf(">"); } printf("\n"); } char **mkargv(char *buf) { char *p; char **argv, **argvp; int len, argc; char ws[] = " \n\t\r\f\v"; argv = (char **)malloc(( MAXARGV+1)*sizeof(char **) ); for (p = buf, argvp=argv, argc = 0; *p != '\0' && argc < MAXARGV; ) { p = p + strspn(p,ws); /* skip leading spaces */ len = strcspn(p,ws); if (len != 0) /* get next word */ { *argvp = (char *)malloc( (len+1)*sizeof(char *) ); strncpy(*argvp,p,len); *(*argvp + len) = '\0'; argvp++; argc++; p = p+len; } } *(argvp) = (char *)NULL; /* end of string array */ return argv; }