将argv传递给功能不起作用

时间:2016-11-22 05:36:06

标签: c function pointers argv

使用C ANSI语言,我尝试将main的{​​{1}}参数传递到将在argv中打印msg的函数。

这是函数签名:

stderr

这是功能:

void erreur(Erreur_prog erreur_entree, const char **argv);

我一直在犯这种错误:

void erreur(Erreur_prog erreur_entree, const char **argv)
{

    switch (erreur_entree)
    {
    case status_ok:
        fprintf(stderr, "%s : Le status est ok.\n", argv[0]);
        exit(0);
        break;   
    case fichier_pgm_manquant:
        fprintf(stderr, "%s : Le fichier PGM est manquant.\n", argv[0]);
        exit(fichier_pgm_manquant);
        break;
    default:
        fprintf(stderr, "%s : Erreur.\n", argv[0]);
    }

}

以下是电话会议的一个例子:

tp2.c:139:33: attention : passing argument 2 of ‘erreur’ from incompatible pointer type
erreur(arguments_invalide, argv);
^
tp2.c:55:6: note: expected ‘const char **’ but argument is of type ‘char **’
void erreur(Erreur_prog erreur_entree, const char **argv);

我试着玩指针但是......有些东西我没有得到。

任何人都可以指出我错过了什么?

1 个答案:

答案 0 :(得分:0)

好了,给了我一个好的头,并清醒了我已经重新安排了代码并且它有效。

这是函数签名:

void erreur(Erreur_prog erreur_entree, const char * nomAppli);

这是功能:

void erreur(Erreur_prog erreur_entree, const char * nomAppli)
{

    switch (erreur_entree)
    {
    case status_ok:
        fprintf(stderr, "%s : Le status est ok.\n", nomAppli);
        exit(0);
        break;   
    case fichier_pgm_manquant:
        fprintf(stderr, "%s : Le fichier PGM est manquant.\n", nomAppli);
        exit(fichier_pgm_manquant);
        break;
    default:
        fprintf(stderr, "%s : Erreur.\n", nomAppli);
    }

}

以下是电话会议的一个例子:

erreur(arguments_invalide, argv[0]);

不再有编译警告

我猜他并不喜欢我在签名中使用const char ** argv

这是指向指针的指针,我需要使用指针(const char * monAppli)

希望这将有助于未来的其他人。