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.