Problème sur un strcmp...

Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006 - 26 juil. 2004 à 10:27
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 26 juil. 2004 à 19:40
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?
A voir également:

4 réponses

theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010
26 juil. 2004 à 10:44
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
0
Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006
26 juil. 2004 à 12:18
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.
0
Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006
26 juil. 2004 à 14:28
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 ;)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 juil. 2004 à 19:40
en c++ du a std::string extrement conseillé

strcmp et c-style string ca rexte du c
0
Rejoignez-nous