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 ... ne fonctionne pas. Je voulais essayer memcmp mais je n'ai pas de len statique. Comme je dois comparer caractère * à caractère et caractère * à caractère * il me faudrait deux solutions, non?
Alors, comment comparer ces pointeurs (en réalité les pointes) de la manière la plus courte possible?
Merci.
MODIFIER
Merci à wallacer et Code Monkey maintenant pour char * to char comparaison que j'utilise ci-dessous:
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 <stdio.h>
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 char
, vous devez passer à un 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 char
array , vous devez déréférencer:
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/cstring/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