RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Besoin d'aide pour trouver l'erreur

Forum : C & C++ - CONSOLE
Sous Catégorie : Console
Type du sujet : Sujet Normale
FAQ : FAQ C & C++ - CONSOLE

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGES : [1] [2]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C & C++ - CONSOLE

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
phobios
Nouveau membre
Avatar de phobios
Inscrit : 09/02/2006
Messages : 25
Message
#108547
Posté le 25/08/06 à 18:45
Bonjour à tous, une fois de plus j'en vient à solliciter votre aide.
J'ai le code suivant (j'ai detaillé au maximum) :


const char * LeTexte = "LeMot"; int taille = sizeof(LeTexte); char Ligne[1024]; for (int w=0;w<1024;w++) Ligne[w] = 0; for(int x=0;Buffer[x]!=0;x++) { for (int y=0;y<taille-1;y++) Ligne[y] = (Buffer[x+y]); if(Ligne == LeTexte) { /* [...] */ } }


On suppose que dans la variable Buffer, à un moment, on a "LeMot" precedé et suivit d'un nombre inconnu de caracteres inconnus.
Au moment ou on rencontre "LeMot" on entre dans le if.

Le probleme est que je ne rentre jamais dans le if, alors que Buffer contient bien "LeMot". Pourtant, en fesant du pas à pas, je vois bien qu'a un moment, Ligne contient bien "LeMot"...

Je vois vraiment pas ou est le probleme, et je suis sur que vous allez le trouver en 5 minutes (bah oui, sa doit etre tout bete, mais je vois vraiment pas =/)

Merci à tous ceux qui m'aiderons, ou essayerons ;)
__________________________
Il faut arreter l'informatique le jour où on trouve 1024 grammes dans un kilo

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108551
Posté le 25/08/06 à 18:58
Personnelement, une comparaison avec == entre tableau, ça me dit rien...
Je n'en suis pas certain à 100%, mais je suis presque sûr que ça fait cela :

if (&Ligne[0] == &LeTexte[0])

ce qui évidement sera faux quoiqu'il en soit.

Utilise plutôt strcmp() pour comparer tes chaînes, je pense que ça vaut mieux Smiley
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

phobios
Nouveau membre
Avatar de phobios
Inscrit : 09/02/2006
Messages : 25
Message
#108554
Posté le 25/08/06 à 19:20
Merci de ton aide Woufeil
C'est vrai que le strcmp() est sans doute plus adapté :

donc je remplace mon if par :

if(!strcmp(Ligne,LeTexte)) { /* [...] */ }


Et... sa change rien =/
D'autres idées ?
__________________________
Il faut arreter l'informatique le jour où on trouve 1024 grammes dans un kilo

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108555
Posté le 25/08/06 à 19:31
Ah mais j'ai comrpis ! strcmp n'est pas magique non plus, elle prend tout ce qu'elle vois avant \ 0 dans les deux chaînes et si c'est pareil elle renvoie 0 Smiley
Hors, ce n'est pas pareil, puisque avant LeMot, il y a un nombre inconnu de caractère... ce qu'il te faudrait, c'est faire une regex (expression régulière) mais je sais pas comment faire en C/C++...

Mais bon, si tu as besoin de faire ce genre de chose, c'est que quelque part ton programme est mal conçu... Pourquoi buffer est trop grand ?
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

phobios
Nouveau membre
Avatar de phobios
Inscrit : 09/02/2006
Messages : 25
Message
#108556
Posté le 25/08/06 à 19:35
Woufeuil > "Hors, ce n'est pas pareil, puisque avant LeMot, il y a un nombre inconnu de caractère..."

Bah nan, tout le systeme des deux boucle imbriquée, juste avant le if sert justement a ce que la variable Ligne contienne "LeMot" et uniquement ça, rien avant, rien apres, et sa a l'air de fonctionner quand je debogue pas à pas, mais malgré sa, je rentre jamais dans mon if =/
__________________________
Il faut arreter l'informatique le jour où on trouve 1024 grammes dans un kilo

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#108558
Posté le 25/08/06 à 19:44
Qu'est ce que Buffer ? Et pourquoi avoir besoin de 2 boucles imbriquées pour copier un tableau de caractères dans un autre ? Un seul suffit.
Pour faire le test d'égalité dans les boucles d'affectation ? Il serrait plus logique de ne faire le test qu'une fois toutes les affectations terminées.

On ne peut pas deviner pourquoi ça ne marche pas car on ne peut pas deviner ce qui se trouve dans Buffer.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

phobios
Nouveau membre
Avatar de phobios
Inscrit : 09/02/2006
Messages : 25
Message
#108559
Posté le 25/08/06 à 19:47
Dans Buffer il y a un tat de caracteres inconnus, et dans ce tat de caracteres ce trouve "LeMot".
Le but des deux boucles est d'isoler "LeMot" dans la variable Ligne et de rentrer dans le if a la rencontre de "LeMot"
__________________________
Il faut arreter l'informatique le jour où on trouve 1024 grammes dans un kilo

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#108560
Posté le 25/08/06 à 20:09
Est ce que dans Buffer, il y a un \ 0 après "LeMot" ?
Il faut que ce soit qqch dans le style : "aerzerpoiLeMot" + \ 0 + "fmdqkjfkfdj";
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

phobios
Nouveau membre
Avatar de phobios
Inscrit : 09/02/2006
Messages : 25
Message
#108561
Posté le 25/08/06 à 20:15
Dans Buffer il peut y avoir des lettres (majuscule minuscule) des espaces, des caracteres accentués, et certains caracteres speciaux comme ></\&:.!,?;
Peut etre d'autres caracteres speciaux, mais je ne crois pas.

Buffer sera amené à etre modifié plusieur fois dans le programme, et la fonction sera apelée plusieur fois, mais dans l'exemple que j'utilise pour le débogage, Buffer contient seulement des lettres et des espaces.

;)
__________________________
Il faut arreter l'informatique le jour où on trouve 1024 grammes dans un kilo

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Woufeil
Membre du club
Chef de projet(s) :
- AdminServ

Avatar de Woufeil
Inscrit : 21/09/2004
Messages : 826
Message
#108562
Posté le 25/08/06 à 20:17
Il faut qu'après LeMot, Buffer contienne \ 0 (sans espace, je peux pas l'afficher dans le forum, un bug). C'est le terminateur de chaîne en C...

En gros, pour déterminer la fin d'une chaîne, les fonctions de string.h cherchent le caractère \ 0 (toujours sans espace) de code ASCII 0. De même, la fonction printf affiche tout le tableau de caractère jusqu'à \ 0 si tu lui demande d'afficher une chaîne. Quand tu saisis une chaine entre "", \ 0 est rajouté automatiquement.
Tout ça pour t'expliquer la nécéssité de ce caractère après LeMot dans Buffer...
__________________________
[col]Woufeil[/col]
Image
Image et respectez la charte.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C & C++ - CONSOLE



    PAGES : [1] [2]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.