2010-12-11 75 views
2
int main(int argc, char ** argv) 
{ 
    if (*argv[2] == *argv[3]) { ... } 
    return true; 
} 

C'est faux, n'est-ce pas?!Comparer les chaînes à venir comme char **

Ce n'est pas mon code, je l'ai trouvé, et, oui, je comprends que nous devons vérifier que nous avons plus de 2 arquments ...

+0

Et ce n'est pas spécifiquement C++, C serait une meilleure étiquette. –

Répondre

1

Oui, il est faux. Vous avez besoin de strcmp.

2

Essayez ceci:

#include <string> 

int main(int argc, char ** argv) 
{ 
    if (argc >= 4 && std::string(argv[2]) == std::string(argv[3])) { ... } 
    return 0; 
} 
+0

et 'argc> = 4'. – rubenvb

3

Pour C++, construire std::string de chaque argument, puis comparer à l'aide operator==.

Pour C, utiliser strcmp.

Pour les deux, vérifiez argc >= 4 avant de faire cette vérification.

+0

ssory, vous voulez dire, que "par défaut" en C++ every (char *) trasnform en std :: string? Même si nous ne le faisons pas exactement? –

+0

La comparaison de chaînes est généralement effectuée de cette manière en C++, même si vous commencez avec un 'const char *' en main. 'strcmp' fait partie de l'exécution de C - en C++, la bibliothèque standard fournit' std :: string' pour soulager la douleur et éviter les erreurs courantes telles que le dépassement de la mémoire tampon, en oubliant de libérer de la mémoire. –

0

C'est un code parfaitement valide, mais il ne fait probablement pas ce que vous attendez. Commençons par la même lettre parce que vous comparez le premier caractère des deux chaînes. If condition sera vrai si argv[2] et argv[3] commencent par la même lettre. Si vous voulez comparer des chaînes entières, utilisez strcmp.

Et 2 autres conseils: Lorsque vous traitez des arguments, vérifiez toujours leur nombre (argc). Lorsque vous quittez le thread principal, la norme est de renvoyer 0 si tout va bien.