2016-11-22 3 views
0

Используя язык C ANSI, я пытаюсь передать параметр main в функцию, которая будет печатать msg в stderr.Передача argv в функцию не работает

Вот функция подписи:

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

Я пробовал играть с указателями, но ... есть что-то, чего я не получаю.

Любой может указать мне, что я упускаю?

+3

'expected 'const char **', но аргумент имеет тип 'char **'' Это сообщение не очень понятно? – kaylum

+0

Извините, забыл поставить вызывающую часть ... – Cyberflow

+1

Возможный дубликат [Почему передача char \ * \ * as const char \ * \ * генерирует предупреждение?] (Http://stackoverflow.com/questions/14562845/why -does-pass-char-as-const-char-generate-a-warning) – DIMMSum

ответ

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

Нет больше предупреждение сборник

Я предполагаю, что он не любил, что я использовал константный символ ** ARGV в подписи

Это был указатель на указатель, и я должен использовать указатель (Const символа * monAppli)

Надеется, что это помогите другим в будущем.

Смежные вопросы