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; } }
6 Réponses :
La ligne compare les pointeurs, pas des chaînes. Utilisez le fonction STRCMP à la place: P> if(strcmp(argv[1],"-e")==0){
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!
Vous ne pouvez pas comparer les cordes C comme ça. Utilisez STRCMP (référence ici ). P>
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. P>
Vous ne pouvez pas utiliser Utilisez == code> 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.
STRCMP code> à la place. Par exemple: p>
Changement: à p> et inclure string.h code>. p> << / p>
Consultez getopt () code>
et fonctions associées; Ça va rendre votre vie beaucoup plus facile. P>
Le prototype de la fonction principale dit que vous traitez avec des pointeurs char * code>. En C, il n'y a pas de surcharge de l'opérateur; Par conséquent,
== code> entre deux
char * code> sera testé si elles sont
STRCMP code>
(la référence pour le La fonction est valide même si elle pointe sur un site C ++) fonction de
@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.