Probléme allocation mémoire! avec un void

Résolu
psyko_flex Messages postés 23 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 23 novembre 2022 - 22 déc. 2005 à 21:09
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 24 déc. 2005 à 16:52
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 déc. 2005 à 21: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++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 déc. 2005 à 21:27
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
0
psyko_flex Messages postés 23 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 23 novembre 2022
22 déc. 2005 à 21:46
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.
0
psyko_flex Messages postés 23 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 23 novembre 2022
22 déc. 2005 à 21:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 déc. 2005 à 22:01
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
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
24 déc. 2005 à 16:05
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;<
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 déc. 2005 à 16:35
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
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
24 déc. 2005 à 16:41
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;<
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 déc. 2005 à 16:45
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
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
24 déc. 2005 à 16:52
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;<
0
Rejoignez-nous