begin process at 2012 02 09 21:57:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

probleme de strcpy ou de strcmp ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme de strcpy ou de strcmp ?

lundi 26 mai 2008 à 09:54:09 | probleme de strcpy ou de strcmp ?

schap25

Bonjour,
J'ai un petit soucis, je cherche a comparé deux chaine de caractère donc je commence par faire :
strcpy(mot,"MIME-Version: 1.0 ");
Le deuxieme mot est recherché caractere par caractere dans un texte afin d'y etre comparé
donc plus loin je fais :
if(!(strcmp(s_read,mot)))
 {
blabla++;
 }

En gros, j'ai l'impression que le code ne prend pas en compte le ".0" pour faire la comparaison, et donc je ne rentre jamais dans le if, malgré que s_read soit identique a mot (normalement), car quand je compare seulement avec "MIME-Version", ca fonctionne .. (c'est pour un code de recherche de mot dans un fichier txt).
Si quelqu'un pouvai m'aider ..

lundi 26 mai 2008 à 10:03:35 | Re : probleme de strcpy ou de strcmp ?

schap25

Pardon, je viens de voir que strcmp s'arretai au premier 0 trouvé, je sais donc d'ou vien le probleme, mais je ne vois pas quel fonction je doit utilisé pour remplacé strcmp..
lundi 26 mai 2008 à 11:08:04 | Re : probleme de strcpy ou de strcmp ?

jfrancois

Bonjour,

1) Il ne faut pas confondre le caractère "0" (zéro) avec le code binaire 0 qui marque la fin d'une chaîne ! Le contenu de la chaîne "mot" peut contenir autant de caractères "0" que possible, ça n'arrêtera pas la comparaison.

2) Il y a un espace derrière le "0" dans le code strcpy(mot,"MIME-Version: 1.0 ");. S'il n'existe pas aussi dans s_read, la comparaison sera toujours négative !

Jean-François

lundi 26 mai 2008 à 11:32:48 | Re : probleme de strcpy ou de strcmp ?

schap25

Ah oki, donc le mystere est encor plus grand XD
La recherche marche quand je cherche "Mime-Version 1" mais ne marche pas avec "Mime-Version 1." ou "1.0"
Mon code c'est un peu près ca (d'après une source trouvé sur ce site, très legerement modifier)


 while(!feof(file))
             {
             n=getw(file);
             l_file++;
             }
         //On multiplie par 4 pour obtenir le nombre d'octets
         l_file=l_file*4;
         //On ferme
         fclose(file);
         //Ouverture en ASCII
         file=fopen(file_t,"r");
         cout<<"Le fichier existe et contient "<<l_file<<" caractère "<<endl;
    }


     for (t=0;t<=(l_file-l_mot);t++)
         {    
                                          
         //On place le pointeur à la position t (initialement nulle puis incrémentée)
         fseek(file,t,0);                                 
         //On récupère l_mot caractères à partir de cette position
         //(autant de caractères que de caractères dans le mot)
         //Attention, le deuxième argument est 'l_mot+1' pour récupérer l_mot caractères !
      
         fgets(s_read,l_mot+1,file); 
        
         //Si les chaînes mot et s_read sont identiques
          if(!(strncmp(s_read,mot,strlen(mot))))
              {
              //On incrémente alors ref (qui contient le nombre de chaînes identiques trouvées)
              ref++;
              }
                      
         }

lundi 26 mai 2008 à 11:34:32 | Re : probleme de strcpy ou de strcmp ?

schap25

ps : le probleme peut-il venir du point ?
lundi 26 mai 2008 à 11:42:58 | Re : probleme de strcpy ou de strcmp ?

schap25

Arf encor pire, quand je cherche uniquement "1.0" ca marche ....
Je comprend vraiment pas la .. (desolé pour les 3 messages d'affilé)

lundi 26 mai 2008 à 11:46:44 | Re : probleme de strcpy ou de strcmp ?

jfrancois

Certainement pas ! Seul le zéro binaire stoppe la comparaison. Est-ce qu'il n'y aurait pas un problème de casse (majuscules/minuscules) ? stricmp() pour ne pas tenir compte de la casse.

Jean-François

lundi 26 mai 2008 à 11:48:51 | Re : probleme de strcpy ou de strcmp ?

buno

Administrateur CodeS-SourceS
Salut,
Une petite précision concernant les fonctions de comparaison: elles sont case-sensitives. Pour ne pas prendre en compte les majuscules et miniscules, il faut utiliser stricmp()

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 26 mai 2008 à 11:54:40 | Re : probleme de strcpy ou de strcmp ?

schap25

Merci a vous !
J'ai trouvé la solution ... vraiment bete ...
L'erreur venait seulement du fait que j'avai initialisé mot comme ca ..
char mot[16];
strcpy(mot,"MIME-Version: 1.0");

Et "Mime-version: 1.0" ca fai + de 16 caractere ... *sigh* vraiment desolé .. ca m'apprendra..


lundi 26 mai 2008 à 12:56:48 | Re : probleme de strcpy ou de strcmp ?

jfrancois

En tout cas c'est une manipulation de fichier qui est extrèmement bizarre !!!
 - Une première lecture pour connaître la taille du fichier via la lecture d'entiers : getw() lit un "int" = 4 octets = 4 caractères, donc une taille de fichier fausse 3 fois sur 4 (le fichier n'a aucune raison d'avoir une taille systématiquement multiple de 4).
 - Une seconde lecture qui lit des blocs de caractères en se décallant d'un caractère à chaque fois : si "l_mot" = 18 caractères, grosso-modo le fichier est lu 18 fois !

Comme c'est un fichier texte vu l'open("r") il suffit de faire (si la sous-chaîne n'est sensée être trouvée qu'une seule fois par ligne) :

l_file = 0; // si besoin de la taille du fichier par la suite
ref = 0;
char* szMot = "MIME-Version: 1.0";
FILE* pFile = fopen(file_t,"r");
if (pFile == NULL) return; // ERREUR
char szLigne[1024]; // buffer de lecture d'une ligne
while(true)
{
   if (fgets(szLigne,1024,pFile) == NULL) break; // EOF
   l_file += strlen(szLigne) + 1; // +1 pour NL
   if (strstr(szLigne,szMot)) ++ref;
}
fclose(pFile);
cout << szMot << " trouvé " << ref << " fois" << endl;


Jean-François


1 2

Cette discussion est classée dans : mot, probleme, comparé, strcpy, strcmp


Répondre à ce message

Sujets en rapport avec ce message

Probleme de gestion de fichier et gestion de l ehrue en C [ par croft ] Mr.croftG un probleme avec un fichier texte contenant un mot sur chaque ligne .Il me faudrait un code qui pourrrait me ressortir aleatoirment un mot d Probleme d'ecriture et copie fichier texte [ par metek ] SalutMon but est d'etudier un fichier txt de rechercher un mot,le localiser et enfin de copier le rest de la ligne(donc les mots qui le suivent sur la probleme avec le fgetc..... [ par raziel62 ] salut,j'ai un prob en C avec la fonction fgetc. Je voudrai mettre dans une variable le contenu d'un fichier .txt puis l'afficherj'ai fait ce code mais probleme pour lier 2 Form [ par hawk671 ] slt j'ai un probleme pour lier 2 form a l'aidee d'1 bouttton.moi g procédais de la maniere suivante:#include void __fastcall TForm1::ButtonOKClick(TOb probleme strcmp [ par ben3020 ] Bonjour à tous Je suis nouveau ds la prog C et j'ai un probleme ave la fonction strcmp : #include #include int main(void) { int cnp; char filename remplacer les strcpy, strcat et autres par d'autres fonctions [ par ebooserge ] salut a tous,en fait mon probleme est plus genant que prise de tete mais je vous le soumets quand meme.quelles fonctions peut-on utiliser a la place d Probleme compilation de bibliotheque partagée [ par aekold ] Salut,J'ai un gros probleme en c++. Voila clairement mon probleme en résumé:dans "dictionnaire.h" :#include "mot.h"class dictionnaire{   mot   *_mot;} Probleme pour un pendu [ par jejehero ] Salut,J'avais demandé de l'aide pour un probleme de calcul de moyenne, maintenant c'est pour un pendu(sans image je le précise), il ne trouve plus que probleme urgent en C [ par cyrina84 ] Bonjour, jai un probleme , c'est que j'ai des mots stockésdans une table de hacahge, et des séquences stockés dans une liste chainées. Le probleme c'e probleme d'execution [ par cyrina84 ] Bonjour, jai un probleme au niveau de mon programme. quand je fais le run il maffiche aucune e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,134 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales