begin process at 2012 02 13 13:46:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Probléme allocation mémoire! avec un void


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

Probléme allocation mémoire! avec un void

jeudi 22 décembre 2005 à 21:09:07 | Probléme allocation mémoire! avec un void

psyko_flex

       Voila je dois controler un bandeau lumineux, voila mon probléme,c'est avec la variable TrameRecue!! je la récupére de la fonction ReceptionCom( ); mais qui renvoi un void et normalement je récupére la chaine suivante "<ID01>"comme accuséé de reception si tous se passe bien (or je en suis sur car le message que je veux s'affiche sur le bandeau,bref!!), avec le débuggeur j arrive a voir la chaine <ID01>voulu mais avec des sign ASCII derriére.... mais ceci ne m interrese pas!comment réduire la taille du void pour ensuite la comparer a la chaine "<ID01>".merci

ici un bout de mon code
//déclaration
unsigned char TrameRecue[100];
....
// la seul fonction qui touche a la valeur de TrameRecue
g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);

//pour avoir juste <ID01>
realloc(TrameRecue,7);
//test
 if(strcmp((char*)TrameRecue,"<ID01> "))
 {
  printf("Echec\n");
 }
 else
 {
  printf("Reussi\n");
 }
 
merci d'avance! de votre aide!
jeudi 22 décembre 2005 à 21:26:20 | Re : Probléme allocation mémoire! avec un void

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
realloc interdit ici, ton buffer est un tableau fixe sur la pile.
TrameRecue[7] = 0; // ON LAISSE "<ID01>"

Pas besoin de strcmp() pour 6 octets:
if((*((DWORD*) TrameRecue) != '0DI<') || (*((WORD*) (TrameRecue + 4)) != '>1'))
{
  printf("Echec\n");
}
else
{
  printf("Reussi\n");
}



ciao...
[ Lien ]
BruNews, MVP VC++
jeudi 22 décembre 2005 à 21:27:48 | Re : Probléme allocation mémoire! avec un void

vecchio56

Administrateur CodeS-SourceS
Tu t'y prends mal, ce n'est pas un problème d'allocation. Il suffit d'ajouter un zero terminal à la fin de ta chaine: g_ErrCom=ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus); TrameRecue[NbCarRecus] = 0; if(strcmp((char*)TrameRecue," ")) Sinon, tu peux aussi utiliser strncmp à la place de strcmp
jeudi 22 décembre 2005 à 21:46:03 | Re : Probléme allocation mémoire! avec un void

psyko_flex

Merci enormément pour ces réponses rapide!la 2 émé solution n'as pas fonctionné, mais la 1ere  a eu un succée total!
En vous remerciant tous les 2 de m'avoir accordé du temps.
jeudi 22 décembre 2005 à 21:58:49 | Re : Probléme allocation mémoire! avec un void

psyko_flex

j'ai juste 2 petit warning que je ne comprend pas  lors de la compilation.

"multi-character character constant" qui vise la chaine suivante " '0DI<' " et '>1'

merci
jeudi 22 décembre 2005 à 22:01:34 | Re : Probléme allocation mémoire! avec un void

vecchio56

Administrateur CodeS-SourceS
Ce ne sont pas des chaines mais des entiers, donc bien entre simples quotes. Les warnings c'est sans doute avec gcc, si ca marche comme ca, n'en tiens pas compte
samedi 24 décembre 2005 à 16:05:16 | Re : Probléme allocation mémoire! avec un void

Joky

Membre Club
Re tout le monde :)
Voilà en faite, j'comprend pas trop le code de BruNews lol :)
Si quelqu'un pouvait m'expliquer ça serait cool :p

if(!Meilleur("Joky")) return ERREUR;<

samedi 24 décembre 2005 à 16:35:26 | Re : Probléme allocation mémoire! avec un void

vecchio56

Administrateur CodeS-SourceS
if((*((DWORD*) TrameRecue) != '0DI<') || (*((WORD*) (TrameRecue + 4)) != '>1')) J'imagine que c'est cette ligne la... On veut comparer avec la chaine "" Pour aller plus vite, on comparer les caractères 4 par 4 (en fait 4 et 2 parce qu'il n'y en a que 6) '0DI<' c'est les 4 premiers. Les caractères sont inversés car le codage se fait comme ca, les poids faibles sont en premier. DWORD c'est 4 octets, et WORD c'est 2 octets Ah oui, printf("Echec\n"); ca veut dire afficher la chaine "Echec\n" dans la sortie standard
samedi 24 décembre 2005 à 16:41:09 | Re : Probléme allocation mémoire! avec un void

Joky

Membre Club
Non mais moi ce qui me génait c'était surtout le \n lol
Donc ok, en faite ce que je comprenais pas trop c'était le (*((DWORD*) sz) == '0DI<'
j'vois pas pourquoi on cast par DWORD* et que l'on pointe vers le résultat lol fin bref
pour les caractères à l'envers c'est compris merci :p

if(!Meilleur("Joky")) return ERREUR;<

samedi 24 décembre 2005 à 16:45:51 | Re : Probléme allocation mémoire! avec un void

vecchio56

Administrateur CodeS-SourceS
Si tu cast pas en DWORD*, ca ne pointe que sur 1 caractère, donc l'indirection te donnera un char, nous on veut un DWORD

1 2

Cette discussion est classée dans : chaine, void, probléme, allocation, tramerecue


Répondre à ce message

Sujets en rapport avec ce message

Problème avec les classes filles [ par gdefrance ] Bonjour à tous, j'ai un problème avec une classe fille en C++, la classe mère chaine détient ses constructeurs et tout marche bien, mais avec la clas au secours!!! [ par serge14 ] Bonjour.je suis en sstage et je dois coder un protocole de transmission /reception de donées avecle pic 18f4550.malgré mes efforts pour comprendre les Exception et Allocation Mémoire [ par magic_Nono ] Bonjour,G réalisé une classe pour gérer mes exception.http://www.cppfrance.com/code.aspx?ID=19671Cette classe comporte une chaine de caractère...Mais Aider moi : Probléme d'allocation dynamique [ par Vie2006 ] Bonjour tout le mondeJ'ai un prbleme qui me bloque ca fait un bout de temps. En fait, je veux declarer un tableau de chaine de caractéres et le rempli probléme de conversion un chaine AnsiSitring en une chaine char [ par freem1 ] je programme en c++ builder 6 et il ya un probléme au niveau de la conversion code:[char cl[16];cl = Edit2->Text.c_str();]</font RS232 ou RS485 dial entre 2 pics [ par Pat2903 ] Bonjour je suis en projet pour crée un dialogue RS485 entre deux pics. Mon souci c'est que j'utilise MPLAB et le Compilateur C18. j'utilise la library lire une chaine de caractère caractère par caractère avec c++builder 6 [ par dl6 ] bon j'expose mon problème je dois lire des coordonnées de fabrication en norme iso qui sont stocké dans un fichier. je voudrai pourvoir les lire carac saisie une chaine de caractére en C [ par nedjma2 ] [b] bonjour; est ce qu'il y'a qlq peut m'aider à ce programme en langage C comment ecrire un programme en C qui saisie une chaine de carctère alph enorme probléme comunication lex yacc... [ par alxidali ] bonjour a tous , j'ai un probléme vraiment embétant qui est : j'ai un fichier lex.l qui me reconnait des identifiant type language de programmation Squelette erroné ?! [ par Spolixjo ] Bonjour, J'ai reçu un exercice niveau 1ère année BTS IRIS qui consiste à compléter ce squelette ci-dessous. Je souhaiterai avoir l'avis d'une person


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,058 sec (3)

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