On ne peut pas comparer argv?
J'ai ce code:
if (argv[i] == "-n")
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
Lorsque ce code est exécuté j'obtiens l'erreur suivante:
mauvais argument '-n'
Sérieusement je ne sais pas pourquoi il le fait. Quelqu'un peut m'expliquer?
OriginalL'auteur Kristina Brooks | 2010-11-21
Vous devez vous connecter pour publier un commentaire.
Comparaisons de chaînes besoin d'une fonction en C - généralement
strcmp()
de<string.h>
.La
strcmp()
fonction renvoie une valeur négative (pas nécessairement -1) si le premier argument sortes avant la seconde; une valeur positive (pas forcément +1) si le premier des arguments sortes après la seconde; et zéro si les deux valeurs sont égales.OriginalL'auteur Jonathan Leffler
La
==
opérateur ne fonctionne pas sur le contenu de chaînes car les chaînes sont effectivement pointeurs de caractère dans cette application, et le pointeur obtenir par rapport.Pour comparer le contenu de chaînes de caractères à utiliser
strcmp
oustrncmp
.OriginalL'auteur dmckee
De la comparaison de pointeurs (
argv[i]
et de"-n"
sont unchar*
et unconst char*
).Utilisation
strcmp()
à la place.OriginalL'auteur peoro
Ce que vous êtes vraiment en train de faire ici est pointeur de la comparaison. argv[i] n'est pas une chaîne, c'est un pointeur vers un emplacement en mémoire au cours de laquelle la chaîne réelle commence. Utiliser strcmp().
OriginalL'auteur
Vous êtes à la comparaison de pointeurs, pas de chaîne de contenu.
argv[i]
et"-n"
sont deux chaînes, stockées à deux endroits différents dans la mémoire, même si les personnages à l'intérieur des chaînes sont égales.OriginalL'auteur Ben Voigt
En C, l'opérateur
==
compare pour l'égalité.Des valeurs de même type numérique sont par rapport à la méthode directe (c'est à dire
2 + 2 == 4
est vrai).Les valeurs des différentes entier (et non entier numérique) types de subir une certaine conversion. Voir ailleurs.
Les pointeurs sont égales si le point à la même adresse.
Littéraux de chaîne sont placés dans la mémoire chevauchent pas toute autre chose, y compris chevauchent pas rien pointé par argv[i] (pour i = 0 à argc).
Vous êtes donc en comparant les deux inégalité de pointeurs; c'est pourquoi. Vous souhaitez utiliser
if (!strcmp(argv[i], "-n")) { ... }
.OriginalL'auteur Jonas Kölker
travaille aussi pour moi
OriginalL'auteur mjoelnir