C comparant des pointeurs (avec des caractères)

Bonsoir, j’ai 2 fonctions et chacune accepte comme argument un pointeur sur char:

char pointer[255]; func1(char* pointer) { ... memcpy(pointer,some_char,strlen(something)); return; } func2(char* pointer) { ... if (pointer==someother_char) exit(0); //FAILs //also I have if(pointer==someother_pointer2char); // FAILs } 

Maintenant, j’ai essayé strstr, strcmp etc … ça ne marche pas. Je voulais essayer memcmp mais je n’ai pas de len statique. Comme je dois comparer char * à char et char * à char *, il me faudrait deux solutions, n’est-ce pas?

Alors, comment comparer ces pointeurs (réellement des pointes) de la manière la plus courte possible?

Merci.

MODIFIER

Merci à wallacer et Code Monkey maintenant pour la comparaison caractère à caractère que j’utilise comme suit:

 func1(char* ptr){ char someother_char[255]; char *ptr_char = NULL; //I have to strcmp a few values so this is why I initialize it first ... ptr_char = someother_char; if (strcmp(ptr,ptr_char) == 0) //gtfo and it does... ... ptr_char = some2nd; if(strcmp... 

Des suggestions peut-être … (hmm fonction externe pour comparer?)

Suggestion1 (par Code Monkey)

 #include  int main(void) { char tempchar[255]; tempchar[0] = 'a'; tempchar[1] = 'b'; tempchar[2] = '\0'; char *ptr_char; ptr_char = &tempchar[0]; printf("%s", ptr_char); return 0; } 

Vous devez utiliser strcmp . Ne voyant pas comment vous avez essayé de l’utiliser, voici comment vous devriez l’utiliser:

 char *someother_char = "a"; char *pointer = "a"; if (strcmp(pointer, someother_char) == 0) { // match! } else { // not matched } 

pour faire ensuite la comparaison avec un personnage, vous devez le promouvoir char* :

 char *someother_char1; char test = 'a'; char *pointer = "a"; strncpy((char*)test,someother_char1,sizeof(test)); if (strcmp(pointer, someother_char1) == 0) { // match! } else { // not matched } 

si vous voulez utiliser le tableau de caractères, vous devez déréférencer la référence:

 char char_array[255]; // don't forget to fill your array // and add a null-terminating char somewhere, such as char_array[255] = '\0'; char *ptr_somechar = &char_array[0]; char *pointer = "a"; if (strcmp(pointer, ptr_somechar) == 0) { // match! } else { // not matched } 

Dès le départ, si vous souhaitez comparer les pointes, vous devez les déréférencer. Cela signifie que pour comparer la valeur de caractère réelle, vous devrez appeler

 if (*pointer == someother_char) 

Cependant, cela ne fera que comparer le premier caractère du tableau, ce qui n’est probablement pas ce que vous voulez faire.

Pour comparer le tout, strcmp devrait fonctionner

 char* someother_str = "hello strstr"; if(strcmp(pointer, someother_str) == 0) { // do something } 

Assurez-vous que votre autre chaîne est déclarée comme un caractère *

Plus d’infos: http://www.cplusplus.com/reference/clibrary/cssortingng/strcmp/

Edit: selon votre commentaire. comparer char * et char n’a pas vraiment de sens. L’un est une valeur de caractère, l’autre est une adresse en mémoire. Pour ce faire, vous pouvez déréférencer le caractère * ou référencer la variable de valeur.

 char c; char* ptr; // dereference ptr if ( c == *ptr ) { ... } // reference the value if ( &c == ptr ) { } 

La première méthode vérifie si les valeurs sont les mêmes. La seconde vérifie si ptr pointe en fait sur la mémoire contenant c ie. est-ce que ptr est un pointeur sur c

J’espère que cela pourra aider

Utilisez la fonction srtncmp no srtcmp.

 int res = strncmp(str, "¿Cuál es tu nombre? ", 100); 

Voir le lien suivant

comparer les chaînes

Les chaînes sont à zéro terminé. Lorsque vous utilisez ce type de chaîne, il n’est pas recommandé de les mélanger avec d’autres fonctions de copie en mémoire. Une fois que vous avez effectué l’opération memcpy, veuillez noter que votre chaîne de destination ne sera pas terminée à zéro. memcmp est une opération rapide. Sinon, vous pouvez simplement parcourir chaque caractère et quitter le jeu dès qu’une différence est trouvée. Pour utiliser strcmp, assurez-vous que les deux chaînes sont terminées par zéro. Sinon, cela entraînerait un crash.

Je vous suggère d’utiliser des fonctions de chaîne telles que strcmp, strlen, strcpy pour gérer les chaînes, car elles sont en réalité implémentées.

Vous ne pouvez pas comparer deux pointeurs à moins que les deux pointeurs ne se réfèrent au même emplacement de mémoire. Le pointeur est simplement une adresse vers un emplacement de mémoire. Ce que vous voulez vraiment faire, c’est comparer le contenu plutôt que de comparer l’adresse où il est stocké. Donc, s’il vous plaît, utilisez strcmp mais encore une fois, je vous préviens, assurez-vous qu’il est nul.