Pb strcmp
Résolu/Fermé15 réponses
loveparade
Messages postés
506
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
14 mai 2011
60
1 févr. 2009 à 18:48
1 févr. 2009 à 18:48
#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.
Utilisateur anonyme
1 févr. 2009 à 18:54
1 févr. 2009 à 18:54
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?
loveparade
Messages postés
506
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
14 mai 2011
60
1 févr. 2009 à 18:58
1 févr. 2009 à 18:58
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/
Utilisateur anonyme
1 févr. 2009 à 18:59
1 févr. 2009 à 18:59
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
1 févr. 2009 à 19:08
1 févr. 2009 à 19:08
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
Utilisateur anonyme
1 févr. 2009 à 19:11
1 févr. 2009 à 19:11
non ca ne marche pas ... quelqu'un aurait une idée comment faire?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
1 févr. 2009 à 19:19
1 févr. 2009 à 19:19
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; }
Utilisateur anonyme
1 févr. 2009 à 19:22
1 févr. 2009 à 19:22
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
1 févr. 2009 à 19:32
1 févr. 2009 à 19:32
Bah oui, c'est exactement ce que je te disais dans mon post ;)
Utilisateur anonyme
1 févr. 2009 à 19:24
1 févr. 2009 à 19:24
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 ?
loveparade
Messages postés
506
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
14 mai 2011
60
1 févr. 2009 à 19:32
1 févr. 2009 à 19:32
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
1 févr. 2009 à 19:36
1 févr. 2009 à 19:36
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 ;)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
1 févr. 2009 à 19:38
1 févr. 2009 à 19:38
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.
Utilisateur anonyme
1 févr. 2009 à 19:45
1 févr. 2009 à 19:45
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;
}
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
1 févr. 2009 à 19:56
1 févr. 2009 à 19:56
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.
Utilisateur anonyme
1 févr. 2009 à 20:20
1 févr. 2009 à 20:20
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.