diff --git a/modules/program-arguments.md b/modules/program-arguments.md index 79d84343..67b635ce 100644 --- a/modules/program-arguments.md +++ b/modules/program-arguments.md @@ -86,8 +86,10 @@ Some `printf()` implementations barf on a null pointer when printing via the `%s` format string. Code: +- #solution argv-do-while.c - #solution argv-while.c - #solution argv-for.c +- #solution argv-for-v2.c - #solution argv-nodash.c - #solution print-argv-recursively.c diff --git a/src/argv-do-while.c b/src/argv-do-while.c new file mode 100644 index 00000000..e4c3c1e4 --- /dev/null +++ b/src/argv-do-while.c @@ -0,0 +1,9 @@ +#include + +int +main(int argc, char *argv[]) +{ + do { + printf("%p '%s'\n", *argv, *argv); + } while (*++argv != NULL); +} diff --git a/src/argv-for-v2.c b/src/argv-for-v2.c new file mode 100644 index 00000000..6fe433fe --- /dev/null +++ b/src/argv-for-v2.c @@ -0,0 +1,9 @@ +#include + +int +main(int argc, char **argv) +{ + /* Not a nice way of doing things but shown as possible. */ + for ( ; *argv != NULL; printf("'%s'\n", *argv++)) + ; +} diff --git a/src/argv-while.c b/src/argv-while.c index 7a99a17a..9220447e 100644 --- a/src/argv-while.c +++ b/src/argv-while.c @@ -1,11 +1,9 @@ #include int -main(int argc, char *argv[]) +main(int argc, char **argv) { - char **p = argv; - - do { - printf("%p '%s'\n", *p, *p); - } while (*++p != NULL); + while (*argv++ != NULL) { + printf("'%s'\n", *(argv - 1)); + } }