9
votes

En utilisant ARGV en C?

Pour une mission, je dois avoir des arguments de ligne de commande pour mon programme C. J'ai déjà utilisé Argc / Argv avant (en C ++) sans problème, mais je ne suis pas sûr que les chaînes de style C affectent comment cela fonctionne. Voici le début de ma principale:

int main(int argc, char *argv[]){

  if(argc>1){
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]);
    if(argv[1]=="-e"){
        // Do some stuff with argv[2]
        system("PAUSE");
    }
    else{
        printf("Error: Incorrect usage - first argument must be -e");
        return 0;
    }
  }


1 commentaires

@Joe: Vous paraissez neuf sur Stackoverflow; Vous pouvez envisager de vérifier la boîte à côté de la réponse que vous ressentez la meilleure réponse à votre question.


6 Réponses :


16
votes

La ligne xxx pré>

compare les pointeurs, pas des chaînes. Utilisez le fonction STRCMP à la place: P>

if(strcmp(argv[1],"-e")==0){


2 commentaires

Haha. 6 réponses comme la mienne à l'époque où il m'a fallu pour écrire la réponse.


Eh bien, ça l'a absolument fait. Merci de corriger cela, je suis très nouveau à C!



3
votes

Vous ne pouvez pas comparer les cordes C comme ça. Utilisez STRCMP (référence ici ).

Parce que les cordes C sont en réalité des pointeurs, l'opérateur == compare l'adresse du premier caractère qui ne sera jamais égale dans ce cas.


0 commentaires

2
votes

Vous ne pouvez pas utiliser == pour comparer les cordes de ce type dans C. Cela vient de comparer les adresses de Argv [1] et de votre littéral, qui sont à peu près garanties.

Utilisez STRCMP à la place. Par exemple: xxx


0 commentaires

7
votes

Changement: xxx

à xxx

et inclure string.h . << / p>


0 commentaires

5
votes

Consultez getopt () et fonctions associées; Ça va rendre votre vie beaucoup plus facile.


0 commentaires

1
votes

Le prototype de la fonction principale dit que vous traitez avec des pointeurs char * . En C, il n'y a pas de surcharge de l'opérateur; Par conséquent, == entre deux char * sera testé si elles sont pointez sur le même endroit . Ce n'est pas le cas, et est rarement le cas du tout. Utilisez le STRCMP (la référence pour le La fonction est valide même si elle pointe sur un site C ++) fonction de : xxx


0 commentaires