【问题标题】:Passing argv into function not working将 argv 传递给函数不起作用
【发布时间】:2016-11-22 05:36:06
【问题描述】:

使用 C ANSI 语言,我试图将mainargv 参数传递到一个函数中,该函数将在stderr 中打印msg

这是函数签名:

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);

这是一个调用示例:

erreur(arguments_invalide, argv);

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

谁能指出我错过了什么?

【问题讨论】:

  • expected ‘const char **’ but argument is of type ‘char **’ 这条信息不是很清楚吗?
  • 抱歉忘记放调用部分...
  • 提示:查看 main 的函数签名。 argvconst char ** 吗?
  • 我正在写一个答案,但我突然想到指针到指针的 C 限定符系统非常愚蠢,在实践中毫无用处。不惜一切代价避免的事情:指针到指针,指针到指针的限定类型。指向限定指针的指针。想出这个系统和它的语法的人不是一个理智的人。

标签: c function pointers argv


【解决方案1】:

好吧,在给它一个很好的想法并让我头脑清醒之后,我重新安排了代码并且它工作了。

这是函数签名:

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)

希望这将在未来对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2015-09-16
    相关资源
    最近更新 更多