Pb strcmp
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
slt à tous ,
j'ai un pb a manipuler strcmp en fait j'ai deux chaine login et user_login comme ceci:
char * login = "foufou"
char * user_login[20] = "foufou "
et losque je les compare avec strcmp il retourne tjs que ce n'est pas equivalent
quelqu'un peut il m'aider?
j'ai un pb a manipuler strcmp en fait j'ai deux chaine login et user_login comme ceci:
char * login = "foufou"
char * user_login[20] = "foufou "
et losque je les compare avec strcmp il retourne tjs que ce n'est pas equivalent
quelqu'un peut il m'aider?
15 réponses
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char * login = "foufou"; char user_login[20] = "foufou"; if (strcmp(login, user_login) == NULL) printf("ok\n"); else printf("Non\n"); system("pause"); return EXIT_SUCCESS; } Tu peux pas déclarer le deuxième char en pointeur sans quoi tu comparera une valeur a une adresse.
poutant j'ai essayé strncmp(login,user_login,5) et ca a marché il parait que les espace sont la source du pb
t'a une idée comment comparé les deux chaine en ignorant les espace?
t'a une idée comment comparé les deux chaine en ignorant les espace?
En les supprimant car un espace = un caractère.
Donc faut supprimer le caractère au préalable. Soit par analyse en int (table ascii a voir) soit en char directement.
https://nicolasj.developpez.com/articles/libc/string/
Donc faut supprimer le caractère au préalable. Soit par analyse en int (table ascii a voir) soit en char directement.
https://nicolasj.developpez.com/articles/libc/string/
ah! je crois que je l'ai trouvé,
strncmp(login,user_login,strlen(user_login)); et le tour est joué
je vais essayer..
strncmp(login,user_login,strlen(user_login)); et le tour est joué
je vais essayer..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Le problème que tu as surtout dans ton exemple est que tu compares un pointeur sur un tableau de char, avec un tableau de pointeurs. Ce qui est différent.
Soit char * login = "foufou";
Soit char login[20]="foufou",
Mais pas : char *login[20]="foufou";
Cdlt
Le problème que tu as surtout dans ton exemple est que tu compares un pointeur sur un tableau de char, avec un tableau de pointeurs. Ce qui est différent.
Soit char * login = "foufou";
Soit char login[20]="foufou",
Mais pas : char *login[20]="foufou";
Cdlt
Mais si ça marche.
#include <stdio.h> #include <string.h> int main(void){ char *login="foufou"; char user_login[20]="foufou"; if(strcmp(login,user_login)==0) puts("ok"); else puts("pas ok"); return 0; }
désolé j'ai fait une faute dans les instruction en fait j'ai
char user_login[20] et pas char * user_login [20] /il n'y a pas d'étoile après char
et user_login = "foufou " // il y a des espaces a la fin
char user_login[20] et pas char * user_login [20] /il n'y a pas d'étoile après char
et user_login = "foufou " // il y a des espaces a la fin
j'ai ecrit user_login = "foufou__________" // avec _ un espace
mais pourquoi les espace dans la fin de user_login ne s'affiche pas ?
mais pourquoi les espace dans la fin de user_login ne s'affiche pas ?
EDIT: (ils ont raison)
Soit tu recherche les espaces et les supprime, soir comme le dis plus bas tu les laisse.
De toute façon si c'est pour un login alors vaut mieux les laisser pour éviter de faire n'importe quoi. Du coup la chaine devra être identique.
Soit tu recherche les espaces et les supprime, soir comme le dis plus bas tu les laisse.
De toute façon si c'est pour un login alors vaut mieux les laisser pour éviter de faire n'importe quoi. Du coup la chaine devra être identique.
Les espaces sont affichés. Mais vu que c'est un espace tu le vois pas. Affiche un printf juste après, tu verras que ça ne sera pas collé à cause des espaces.
Si tu veux comparer les deux premiers (donc t'arrêter au premier espace), tu fais un strchr pour remplacer le premier espace par un \0. Attention dans ce cas, ça ne marchera que sur le tableau de char ;)
Si tu veux comparer les deux premiers (donc t'arrêter au premier espace), tu fais un strchr pour remplacer le premier espace par un \0. Attention dans ce cas, ça ne marchera que sur le tableau de char ;)
Salut,
En les supprimant car un espace = un caractère.
Ben, pourquoi le supprimer?
Autant ne pas le taper.
Si un espace est tapé alors c'est normal et tout à fait logique que les chaînes comparées ne soient pas égales.
Sinon, la vérification ne sers pas à grande chose puisque au lieu d'espace on pourra considérer n'importe quel caractère.
En les supprimant car un espace = un caractère.
Ben, pourquoi le supprimer?
Autant ne pas le taper.
Si un espace est tapé alors c'est normal et tout à fait logique que les chaînes comparées ne soient pas égales.
Sinon, la vérification ne sers pas à grande chose puisque au lieu d'espace on pourra considérer n'importe quel caractère.
bien merci infiniment pour votre aide , en fait le pb viens de la lecture a partir d'un fichier et j'ai oublié que j'ai dejé fait une fonction deletespace pour supoprimer les espaces a la fin
donc maintenant pb resolut
voici la fonction que j'ai fait:
char *deletespace(char *s){
int len;
len = strlen(s);
while(s[len-1] == ' ' || s[len-1] == '\n'){
s[len-1] = '\0';
len--;
}
return s;
}
donc maintenant pb resolut
voici la fonction que j'ai fait:
char *deletespace(char *s){
int len;
len = strlen(s);
while(s[len-1] == ' ' || s[len-1] == '\n'){
s[len-1] = '\0';
len--;
}
return s;
}
Re,
en fait le pb viens de la lecture a partir d'un fichier
On ne pouvais pas le savoir ;-))
Pour ta fonction, tu n'as pas besoin de faire un return vu que tu passe en paramètre le pointeur.
en fait le pb viens de la lecture a partir d'un fichier
On ne pouvais pas le savoir ;-))
Pour ta fonction, tu n'as pas besoin de faire un return vu que tu passe en paramètre le pointeur.
non, ce que je veux dire par "le pb vient a partir de la lecture d'un fichier" c'est que les espace viennent de la lecture d'un champ de 20 caract (qui peut contenir des espaces) a partir fichier, mais le pb reste le meme c_a_d les espace a la fin de chaine
et a propos de char deletespace t'a raison j'aurai du le supprimer mais c'est pas grave ce n'est pas grand chose.
a+ et remerci.
et a propos de char deletespace t'a raison j'aurai du le supprimer mais c'est pas grave ce n'est pas grand chose.
a+ et remerci.