Probléme allocation mémoire! avec un void [Résolu]

Signaler
Messages postés
19
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
17 août 2013
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
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 ""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 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 "".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
realloc(TrameRecue,7);
//test
if(strcmp((char*)TrameRecue," "))
{
printf("Echec\n");
}
else
{
printf("Reussi\n");
}

merci d'avance! de votre aide!

10 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
realloc interdit ici, ton buffer est un tableau fixe sur la pile.
TrameRecue[7] = 0; // ON LAISSE ""

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

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
19
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
17 août 2013

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.
Messages postés
19
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
17 août 2013

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah okay lol merci mon ami pour la vie :)

Tu es d'une très grand importance pour mes neuro récepteurs ;)

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