Getopt arguments optionnels?

J'ai un programme dans lequel vous entrez une option
-d
et puis, si oui ou non vous fournir un non-argument facultatif après l'option, faire quelque chose.
Voilà mon code:

#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>

#define OPT_LIST "d::" 

int main (int argc, char *argv[])
{
    int c;
    char string[] = "blah";

    while ((c = getopt (argc, argv, OPT_LIST)) != -1)
    {
        switch (c)
        {
            case 'd':
                    printf("%s\n", optarg);
                    break;

            case '?':
                fprintf(stderr, "invalid option\n");
                exit(EXIT_FAILURE);
        }   
    }
}

Donc, si vous entrez un non-argument facultatif après l'option, il imprime l'argument. Mais je veux imprimer le char "chaîne" si l'utilisateur ne fournit pas un non-argument optionnel (c'est pourquoi j'ai mis le double deux-points dans les
OPT_LIST). Mais je ne suis pas sûr de savoir comment ce faire de sorte que toute aide serait grandement appréciée.

Heres ce qui se passe quand je lance le programme:

user:desktop shaun$ ./arg -d hello
hello
user:desktop shaun$ ./arg -d 
./arg: option requires an argument -- d
invalid option

Je suis sur un Mac avec OS X à l'aide du langage C.

Euh, printf("%s\n", string)?
Je veux de la chaîne d'impression lorsque je lance le programme comme ceci: ./arg -d
C'est exactement ce que la ligne ci-dessus ferait si elle est insérée à l'endroit où fprintf(stderr, "invalid option\n"); réside actuellement.
J'ai essayé et il a imprimé la chaîne, mais il a également imprimé ./arg: option requires an argument -- d Aucune idée de comment se débarrasser de l'erreur?
Vous ne pouvez pas. getopt() est nécessaire pour imprimer un message de diagnostic.

OriginalL'auteur pudumaster | 2013-10-26