Problème sur un strcmp...

Signaler
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Bonjour,
voilà, je dois rechercher dans un fichier si chaque ligne correspond à un masque donné (chaque masque est stocké dans une classe). Voilà comment je procède :
le constructeur :
Categorie::Categorie(char * mask)
{
_masque = new char [512];
strncpy(_masque, mask, 512);
}


Je récupère ma ligne :
char masque[256];
fgets(masque, 512, F);


et quand je veux comparer :
bool Categorie::comparer(char * mask)	//Vérifie que le masque donné est le bon
{
char * t = new char [512];
strncpy(t, mask, 512);
int i = strcmp(_masque, t);
if (!strcmp(_masque, t))
{
delete[] t;
return 0;
}
else
{
delete[] t;
return 1;
}
}

j'ia utilisé une variable temporaire et fais un if pour pouvoir bien vérifier mes valeurs (Avant, je faisais juste : return strcmp(_masque, mask);) et meme lorsqu'elles sont égales, mon compilo considère que mes deux chaines sont différentes (VC++ 6.0).
j'obtiens -1 à chaques fois.

Quelqu'un aurait-il compris?

4 réponses

Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Il y a une chose que je ne comprends pas dans ta maniere de procéder... pourquoi ton masque a une taille fixe de 512 caracteres ? En soit ça n'a pas d'intérêt... faudrait que tu fasses un truc du genre :

Categorie::Categorie(char * mask)
{
if(mask)
{
  _masque = new char [strlen(mask)+1]; 
   strcpy(_masque, mask);
}



Ensuite pour la focntion de comparaison ca devrait donner :

bool Categorie::comparer(char * mask) //Vérifie que le masque donné est le bon
{
char * t = new char [strlen(mask)+1];
strcpy(t, mask);

int i = strcmp(_masque, t);
if (!strcmp(_masque, t))
{
delete[] t;
return 0;
}
else
{
delete[] t;
return 1;
 }
}



}

Si tu as encore un problème laisse de nouveau un message.

Mess with the best, die like the rest
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006

Bha je met tout à 512 par ce que c'est la taille de mon buffer, quand je récupère une ligne dans mon fichier.
Comme ça je usis sur que ce n'est pas une histoire de taille qui me fait planter tout ça...
J'ia essayé ta technique, bah non, toujours pareil, strcmp me renvoie -1.
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006

Bon, c'est bon, j'ai trouvé, C juste que quand je récupérais ma chaine dans le fichier, il y avait un caractère de retour chariot qu'il gardait et pour lui, CT pas la bonne chaine à ce moment là.
C réglé, ça marche chez moi ;)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
en c++ du a std::string extrement conseillé

strcmp et c-style string ca rexte du c