Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2518 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Borland] Sizeof(struct x) et AnsiString

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5
Page Précédente
Auteur Sujet :

[Borland] Sizeof(struct x) et AnsiString

n°583441
jeoff
Posté le 04-12-2003 à 23:30:15  profilanswer
 

bon je réalise une petite appli de chat.
j'ai mon serv et mon client qui communiquent.
ils s'envoient une structure de type :
 

Code :
  1. struct message
  2. {
  3.   int Action;
  4.   AnsiString Pseudo;
  5.   AnsiString Texte;
  6. };
  7. struct message Msg;


 
le problème c'est que le serveur ne lit pas plus de 4 bytes en réception d'après ce que j'ai pu tester pour débug.
 
A mon avis c'est les AnsiString qui foirent car du coup j'arrive seulement a afficher Msg.Action;
Ca semble plutot logique car d'après ce que j'ai compris, les AnsiString sont des chaines de char dynamique et donc en récéption, le serveur ne sait pas comment séparer les caractères des 2 AnsiString.
 
Faut il que j'envoie les champs séparément ou bien faut il que je repense ma structure avec des char* ???
 
merci d'avance car je galère, j'ai ma connec ss 98 et borland ss xp c d'un pratique :(


Message édité par jeoff le 04-12-2003 à 23:30:50
mood
Publicité
Posté le 04-12-2003 à 23:30:15  profilanswer
 

n°583444
Taz
bisounours-codeur
Posté le 04-12-2003 à 23:33:35  profilanswer
 

tu crois qyue y a quoi dans ta string ? un pointeur

n°583454
jeoff
Posté le 04-12-2003 à 23:43:41  profilanswer
 

tu propose quelle solution ?

n°583455
Taz
bisounours-codeur
Posté le 04-12-2003 à 23:44:24  profilanswer
 

des fonctions membres propres de sérialisation

n°583458
jeoff
Posté le 04-12-2003 à 23:47:30  profilanswer
 

oulla tu est trop technique pour moi la, tu peux développer si tu un peu de temps ???

n°583459
Taz
bisounours-codeur
Posté le 04-12-2003 à 23:49:32  profilanswer
 

ben des fonctions membres pour générer une représentation binaire (sous forme de char[]) de ton instance et une autre pour faire le processus inverse. pour que ton serveur s'y retrouve dans ses trains de bits, il te faut aussi définir un protocole

n°583463
jeoff
Posté le 04-12-2003 à 23:57:34  profilanswer
 

moi je pensais a un truc comme ca sinon, c'est pas possible?
 

Code :
  1. envoi :
  2. char *buffer = NULL;
  3. int length=Msg.Texte.Length();
  4. Socket->SendBuf(&length, sizeof(int));
  5. buffer = new char[length];
  6. // la on rajoute une ligne genre buffer=Msg.Texte en gros (en gros parceque j'ai pas trop  
  7. //mes pointeurs en tete ni mes casting
  8. Socket->ReceiveBuf(buffer, length);


 
t'en pense quoi, si je fait ca pour chaque chaine, sachant que ta solution me parait un peu plus complexe et que mon binome va encore me faire chier parceque faut encore changer quelquechose(sachant que c'est pas lui qui code le soir jusque 1h du mat :whistle:)


Message édité par jeoff le 05-12-2003 à 00:00:22
n°583465
Taz
bisounours-codeur
Posté le 05-12-2003 à 00:01:44  profilanswer
 

ben oui, c'est ce genre de chose, mais faut beauciup, beaucoup peaufiner. et au lieu d'int, utilise des unsigned. pas la peine de buffer intermédiaire pour l'envoi à priori

n°583466
jeoff
Posté le 05-12-2003 à 00:03:32  profilanswer
 

oki merci beaucoup je vais creuser de ce coté, en éspérant de pas oublier d'aller dormir, deja que jai oublié de bouffer pff jsuis trop mauvais en code mais je nerdize deja

n°584645
shinjuku83
新宿
Posté le 06-12-2003 à 21:49:04  profilanswer
 

Tu envoie que 4 bytes parce que ta struct ne fais que 4 bytes. En fait l'int plus les AnsiString font en tous 12 octets mais il doit avoir envie d'envoie que 4 octets pour une autres raison. En tous cas si tu veux qu'il envoie tous il suffit que tu lui donne la taille exacte de la struct en mémoire à savoir :

Code :
  1. taille = sizeof(int) + Msg.Pseudo.Lenght() + Msg.Texte.Lenght();
  2. Socket->ReceiveBuf( (struct message *) &buf, taille);


 
Ensuite pour recupérer ca tu ne peux pas utiliser un char ù sinon tu ne pourra pas l'avoir en structure et recuperer tes informations correctement. Donc tu fais :

Code :
  1. envoi : 
  2.  
  3.   struct message buffer;
  4.   int length=Msg.Texte.Length();
  5.  
  6.   Socket->SendBuf( (int *) &length, sizeof(int));
  7.  
  8.   Socket->ReceiveBuf((struct message *) buffer, length);


 
Je pense que ca dois donner ca en partant du bout de code que tu as donné.
Tu peux continuer à utiliser les AnsiString ton problème viens tu fais que ton server ne sais pas du tous combien d'octets y'a dans les Strings vu qu'il ne les connais pas. Donc il faut bien que tu envoie d'abord la taille de ta structure comme je l'ai fait plus haut et ensuite tu envoie t'as structure avec la bonne taille.
 
Voila en esperant que tu comprendra ca que je veux dire. Sinon je reste dispo sur MSN ;)
 
A+, Mikael

mood
Publicité
Posté le 06-12-2003 à 21:49:04  profilanswer
 

n°584653
Taz
bisounours-codeur
Posté le 06-12-2003 à 22:20:00  profilanswer
 

je connais pas les prototype, mais je doute que les cast soient nécessaires
 
par contre ça
(struct message *) buffer
vous m'appelez le jour où ça marche

n°584654
shinjuku83
新宿
Posté le 06-12-2003 à 22:22:22  profilanswer
 

oups Socket->ReceiveBuf((struct message *) &buffer, length);
 
les cast sont pas forcement necessaire mais c'est toujours mieux quand on les met...

n°584655
Taz
bisounours-codeur
Posté le 06-12-2003 à 22:24:51  profilanswer
 

Shinjuku83 a écrit :

les cast sont pas forcement necessaire mais c'est toujours mieux quand on les met...

ta gueule :o

n°584656
shinjuku83
新宿
Posté le 06-12-2003 à 22:26:19  profilanswer
 

struct message buf;
struct message *buffer;
buffer = &buf;
Socket->ReceiveBuf((struct message *) buffer, length);
 
Allo Taz ? je crois que (struct message *) buffer ca marche :p

n°584657
shinjuku83
新宿
Posté le 06-12-2003 à 22:27:19  profilanswer
 

Taz a écrit :

ta gueule :o


 
Ca je sais pas si ca passe à la compilation... kel langage !!!

n°584658
Taz
bisounours-codeur
Posté le 06-12-2003 à 22:28:00  profilanswer
 

ta gueule :o
comme si &buf pouvait être autre chose qu'un struct message *
ta gueule :o

n°584659
shinjuku83
新宿
Posté le 06-12-2003 à 22:29:47  profilanswer
 

lol tu me fais bien marrer toi allez ferme la un peu toi aussi tu fais un peu gamin je trouve...

n°584666
Taz
bisounours-codeur
Posté le 06-12-2003 à 22:49:52  profilanswer
 

Code :
  1. int length=(int)(((struct message*)&Msg)->Texte.*(int (AnsiString::*)() const)&AnsiString::Length)();


faut aller jusqu'au bout de vos conneries les mecs
des cahuètes pour ce lui qui me fait la version C++

n°584667
shinjuku83
新宿
Posté le 06-12-2003 à 22:56:32  profilanswer
 

c'est vrai qu'il faut de tous pour faire un monde.... meme des tres con des fois.
 
Bon d'une part tu aimes pas les casts c'est ton droit mais moi j'ai appris dans mon ecole qu'il faut en mettre la ou c'est necessaire alors si je veux en mettre la ou je veux j'en met et puis c'ets tous c'est pas obliger de venir me taper sur le systeme comme un gros boulet. Bon c'est vrai que t'en ai un et que ta mere t'as border un peu trop pres du mur, mais bon faut pas non plus faire chier le monde a cause de ca maintenant, y'a des cordes pour ce genre de probleme ou meme la noyade.
 
Je t'ai rien fait et rien dit sur ta facon de coder alors tu me lache et tu retourne jouer au lego !


Message édité par shinjuku83 le 06-12-2003 à 23:00:59
n°584668
Taz
bisounours-codeur
Posté le 06-12-2003 à 23:03:41  profilanswer
 

j'en ai vraiment ma claque de ce forum. surtout que les cat C et C++ sont vides. Ça me gave de recommencer les présentations et les mêmes discussions. Si vos profs ont dit ça, je peux rien faire, je suis vraiment trop cons. Mais je vais m'en souvenir pour la prochaine fois que vous, les petits mariolles, vous aurez un problème de programmation.
 
 
edit : d'un autre côté, c'est un peu toujours la même chose. Quand je pose des questions, le prof en a jamais parlé, quand je donne des réponses, le prof a dit le contraire


Message édité par Taz le 06-12-2003 à 23:13:22
n°584675
HelloWorld
Salut tout le monde!
Posté le 06-12-2003 à 23:52:05  profilanswer
 

Citation :

ta mere t'as border un peu trop pres du mur


C'est pas plutôt bercé ? ;)
Oui, Taz devrait prendre des cours de communication. Mais pour le C++ il en a moins besoin. Méfies-toi des cours (de prog) de tes profs. La programmation demande bcp de pratique et surtout une perpétuelle remise au gout du jour. Bcp de profs (et programmeurs en général) ne font pas cet effort et se dépatouillent avec les bases qu'ils ont acquises y'a 10 ans. Mais tout évolue, y compris les langages. D'autant plus que c'est rarement les profs qui font les TP de prog. Y'a des profs pour qui la prog est une passion et une spécialité, ils ont leur petite réputations. Pour les autres, sur souvent l'aspect le + chiant de leur boulot.
Ce qui est sûr, c'est que si tu dois rendre un TP, et que le prof dit de caster, il faut le faire si tu veux une bonne note.

Citation :

Ça me gave de recommencer les présentations et les mêmes discussions.


Prend le code qui revient le + souvent et fout-le sur ton site, avec 2/3 explications.
 

Citation :

j'en ai vraiment ma claque de ce forum. surtout que les cat C et C++ sont vides.


Faut croire que ces langages ne sont plus utilisés...[:austinou]  
Aller, je vais faire un peu de C# [:belokan]

n°584741
shinjuku83
新宿
Posté le 07-12-2003 à 12:21:52  profilanswer
 

Je comprend bien ton discours. Mais ce que je veux faire comprendre c'est que moi je suis venu ici simplement dans le but d'aider un ami dans un projet. Et puis on viens me souler la tete parce que j'ai fais un cast ! Je reve quoi je vous demande pas de me critiquer et je vous demande pas d'aider sur le code que j'ai mis, j'ai toujours mis des cast dans mes prog et j'ai jamais eu de problème. Bien sur si des gens s'amuse à en mettre tellement que ca fais bugger leur prog c'est leur soucis moi j'ai jamais eu de probs avec mes casts donc je continue à en mettre comme le demande les profs dans mon ecole.
Et en plus je comprend mieux quand je relis mon code.
Après si vous douter de la façon de coder de mes prof vous pouvez toujours discuter avec eux, nous on a deja essayer c'est pas facile !
Alors laisser moi aider mon potes tranquillement et laisser moi mettre mes casts la ou je veux. Tu dis que la prog demande bcp de pratique alors que tu ne me connais meme pas et tu ne sais meme pas depuis combien de temps je programme. Tu ne sais meme pas depuis quand j'utilise un ordinateur. Et encore mieux tu ne sais meme pas l'age que j'ai...
 
Alors respecter un peu les autres et arreter de venir critiquer n'importe quel code de n'importe qui d'autant que je suis jamais venu vous faire chier avec des codes qui bugger a cause d'un cast.
 
Voila sur ce je vous laisse dans votre monde décasté ;)

n°584756
Taz
bisounours-codeur
Posté le 07-12-2003 à 14:09:27  profilanswer
 

le truc c'est que certain ont beaucoup plus d'expérience et de connaissances que d'autres, alors quand ils prennent la peine de faire une remarque, un avertissement, de donner un bout de code, c'est que ça leur semble important. Maintenant si vous vous en foutez ...

n°584785
shinjuku83
新宿
Posté le 07-12-2003 à 15:47:11  profilanswer
 

Et qu'es ce qui te fais dire que tu as plus d'experience que moi dans la prog ?

n°584814
HelloWorld
Salut tout le monde!
Posté le 07-12-2003 à 16:44:09  profilanswer
 

Citation :

Après si vous douter de la façon de coder de mes prof vous pouvez toujours discuter avec eux, nous on a deja essayer c'est pas facile !


La dessus laisse-moi te donner un bon conseil issu de mon expérience scolaire : un élève ne peut pas avoir raison.

Citation :

Tu dis que la prog demande bcp de pratique alors que tu ne me connais meme pas et tu ne sais meme pas depuis combien de temps je programme. Tu ne sais meme pas depuis quand j'utilise un ordinateur. Et encore mieux tu ne sais meme pas l'age que j'ai...


Je pensais pas à toi, ni à quelqu'un en général. Seulement, bien programmer requiert de régulièrement se tenir au courant des nouveautés, de changer ses habitudes, etc... Généralement, les profs s'y sont mis à un moment donné, puis ne codant plus que des trucs pour eux ils se sont déconnectéq. De toutes facons pour moi c'est simple ; pour bien programmer il faut avoir bosé en entreprise. Y'a biensûr des profs qui programment bien. A chaque fois perso, ils ont bossés un petit bout de temps avant de devenir enseignants. En revanche il y a des profs qui n'ont jamais quitté leur université. Je vois pas comment ils peuvent bien programmer, et en général, ils programment pas. Je te l'ai dit, un prof généralment programme pour coder son algo qu'il a mis 5 ans à développer, et c'est la partie la plus chiante de son boulot. Alors il se fait pas chier avec les const, à apprendre les string, les ref, ... Maitenant tu a peut être beaucoup de chance et c'est un Jésus du C++ qui te fait les TP. Moi souvent ça a été le Thésard du coin qu'on a chopé pour cette tâche ingrate. Il était à ta place y'a 2 ou 3, alors c'est random...
Maintenant Taz fais une remarque à propos de ton code. Comme toujours, c'est pas de manière élégante. La première fois ca surprend, ca vexe. Apres, on y fait plus gaffe. Le C++ est son petit bébé et il aime pas qu'on le maltraite ;)
Il: faut accepter l'idée que tu puisse faire mieux, sinon tu progressera jamais. C'est justement cette mentalité chez pas mal de profs que j'essayais de dénoncer. "Ca fait 10 que je fais comme ça, et ça mrche". Oui, il y a bcp de manières d'écrire un code qui marche. Mais certaines sont meilleurs que d'autres, même si toutes compilent et s'exécutent sans pblm.
Mais moi j'ai rien contre toi, ni même contre les profs. J'ai fini par accepter et comprendre cela. Bcp sont moyennement doués en prog (Taz dirait sûrement nuls mais pas moi quand même) mais ils sont brillants dans un autre domaine. Y'en a quand même quelques uns je me demande comment ils sont arrivés là, mais c'est une minorité tout de même.
Et puis te vexe pas. De toutes façons ton code ne sera jamais parfait, il déplaira toujours à quelqu'un, qui aurait mieux fait ceci ou cela. Moi j'ai rien contre toi, j'ai pas voulu t'offenser, au contraire.

n°584865
shinjuku83
新宿
Posté le 07-12-2003 à 18:21:53  profilanswer
 

Je sais que t'as pas voulu m'offenser et je le comprend et je le prend pas mal. Le truc c'est que, à la limite mon cats n'est pas du tous utile, ce que je veux faire comprend c'est que j'ai repondu à ce post dans le sens d'aider quelqu'un et pas qu'on me fasse un cours sur les cast c'est tous !
Ensuite pour un malheureux petit cast on en fait tous un drame j'en met pas non plus toutes les lignes j'en met quand je sais que plus tard je vais relire la ligne et que ca va m'aider de mettre ce cast pour me rapeller ce que la ligne fait exactement.
C'est pas en mettant un cast tous les 3 prog que je vais mettre en danger important ma facon de coder.
 
Enfin bref, je prefere arreter la parce que, et ce que je veux vous faire comprendre, se post n'a pas pour but de discuter des cast. Si vous voulez faire une discution philosophique sur les cast faite un autre post comme ca on pourra faire comme dans tous les debat y'aura un groupe contre un groupe pour et puis 2 ou 3 gars vont changer d'avis dans chaque groupe et on sera toujours au meme point.
 
PS : je porte une grande confiance à mon prof de prog qui fait partie de la communauté Linux et de ce fait code vraiment bien en C.

n°584868
Taz
bisounours-codeur
Posté le 07-12-2003 à 18:24:52  profilanswer
 

allez, rammasse la craie parterre  :pfff:


Message édité par Taz le 07-12-2003 à 18:25:26
n°584899
ffluff
Challenge Everything
Posté le 07-12-2003 à 18:45:14  profilanswer
 

@Shinjuku83: peut importe ton age, depuis combien de temps tu prog.
Si tu fais un truc mauvais même si ca marche, il reste toujours mauvais.
Exemple bidon :
on suppose un mec qui ne connait rien à la construction de maison.
tu lui dit construit ue maison. et il te sort un truc qui ressemble à une maison.C'est une maison ok mais les normes de sécurité sont pas respecté car il savait même pas qu'il en fallait.Pourtant c'est bien une maison mais j'y habiterai jamais.
 
Mais bon c'est pas parceque ca marche que c'est bon.
Ton prog peut marché 1000 fois et planter à la 1001fois. (cf windows)
Le but d'un programme n'est pas de faire plaisir au compilo ou au  prof, le but c'est d'avoir un programme correct de A à Z.


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°584900
Taz
bisounours-codeur
Posté le 07-12-2003 à 18:46:54  profilanswer
 

Citation :

voici Luc, et Luc, pour plus d'incompréhension


Message édité par Taz le 07-12-2003 à 18:47:28
n°584905
shinjuku83
新宿
Posté le 07-12-2003 à 18:51:58  profilanswer
 

Citation :


on suppose un mec qui ne connait rien à la construction de maison.
tu lui dit construit ue maison. et il te sort un truc qui ressemble à une maison.C'est une maison ok mais les normes de sécurité sont pas respecté car il savait même pas qu'il en fallait.Pourtant c'est bien une maison mais j'y habiterai jamais.


 
c'est une histoire de norme ca. Ou elle est la norme qui dit qu'on doit pas mettre de cast dans un prog en C ?
Et puis si effectivement cette norme existe pourkoi on continue à l'apprendre et à l'utiliser ? Et surtout pourkoi l'avoir crée ? Parce que les trucs qui servent à rien c'est toujours utilise de les créer ?

n°584910
Taz
bisounours-codeur
Posté le 07-12-2003 à 18:57:32  profilanswer
 

dans les manuels de référence de C.
 
tu relis le sujet, tu ouvres les yeux, et tu vois que le seul truc qui empêche ce genre de conneries, c'est les gens comme toi, aggripés à leur folklore, « le professeur a raison ».
 

Citation :

ces casts étaient obligatoires en pré-ANSI, donc autant dire que ici, tout le monde a appris le C après la norme ANSI, qui est d'ailleurs arrivait vite après la création du C du fait de la prolifération des dialectes.
c'est un croyance populaire répandu de caster à gogo tous les pointeurs. c'est une erreur grave, et une incompréhension totale du C. void* est le pointeur générique et est donc employé pour faire de la généricité. pour cela, les conversion void* <-> Type* sont légales, implicites, naturelles, et parfaitement définies (note que Type peut être lui même un pointeur)
 
donc le cast du malloc est inutile (entre autre)
 
je ne dis pas que le cast est inutile dans l'absolu, mais dans 80% de vos utilisations, c'est le cas
 
http://forum.hardware.fr/forum2.ph [...] 564&cat=10
 
si tu hésites sur faut-il caster ou nom, demande moi. le truc c'est de bien raisonner sur les types. des fois, il faut caster de force, mais c'est souvent pour faire des choses barbares (deux structures équivalents, A* -> B* ou alors des choses plus barbares)
 
aujourd'hui les fonctions binaires (memcpy, fread, fwrite, etc) sont protoypées avec des void*...

n°584912
Taz
bisounours-codeur
Posté le 07-12-2003 à 19:00:57  profilanswer
 

d'ailleurs on parle de C ici. si on fait du C++, la syntaxe des cast est suffisemment lourde pour y réfléchier à deux fois avant de caster :o

n°584915
shinjuku83
新宿
Posté le 07-12-2003 à 19:06:02  profilanswer
 

Citation :


mais dans 80% de vos utilisations


ben voila moi j'utilise les 20%

n°584916
Taz
bisounours-codeur
Posté le 07-12-2003 à 19:07:49  profilanswer
 

je vais pas te faire l'insulte de citer encore une fois tes bouts de code

n°584921
shinjuku83
新宿
Posté le 07-12-2003 à 19:17:04  profilanswer
 

Mais fait ce que tu veux je m'en tape completement de toutes facon tu peux dire ce que tu veux je continuerais a faire comme j'ai envie c'est pas toi qui va m'en empecher d'autant plus que les cast de mes codes au dessus on est pas obliger de les recopier c'est juste pour etre plus clair dans l'explication au moins

n°584943
ffluff
Challenge Everything
Posté le 07-12-2003 à 19:58:17  profilanswer
 

Shinjuku83 a écrit :

Mais fait ce que tu veux je m'en tape completement de toutes facon tu peux dire ce que tu veux je continuerais a faire comme j'ai envie c'est pas toi qui va m'en empecher d'autant plus que les cast de mes codes au dessus on est pas obliger de les recopier c'est juste pour etre plus clair dans l'explication au moins


tiens si je construisais moi même ma maison  [:ffluff]


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°584950
Taz
bisounours-codeur
Posté le 07-12-2003 à 20:04:20  profilanswer
 

Shinjuku83 a écrit :

Mais fait ce que tu veux je m'en tape completement de toutes facon tu peux dire ce que tu veux je continuerais a faire comme j'ai envie c'est pas toi qui va m'en empecher d'autant plus que les cast de mes codes au dessus on est pas obliger de les recopier c'est juste pour etre plus clair dans l'explication au moins

ne viens pas demander conseil, et ne conseilles personne alors.
 
levez la main ceux qui ont plus d'expérience que Shinjuku83 pour ne pas écrire

Code :
  1. int length= ...
  2. Socket->SendBuf( (int *) &length, ...

n°584952
shinjuku83
新宿
Posté le 07-12-2003 à 20:06:01  profilanswer
 

Pourkoi tu fais faire tes prog par des proffesionnel ?

n°584954
Taz
bisounours-codeur
Posté le 07-12-2003 à 20:07:06  profilanswer
 

parce que j'ai aussi eu mon bac de français :o

n°584956
shinjuku83
新宿
Posté le 07-12-2003 à 20:07:54  profilanswer
 

Citation :


j'en ai vraiment ma claque de ce forum. surtout que les cat C et C++ sont vides.


 
je comprend pourkoi maintenant...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Borland] Sizeof(struct x) et AnsiString

 

Sujets relatifs
[Borland] Récupérer une chaine de char contenue dans une listboxcréation d'un éditeur graphique sous borland C++
struct sock[borland] Comment superposer 2 sons ?
[borland c++] Petite erreur de compil svp help .......novice [borland c++ buider] Comment afficher une image avec un bouton?
comment on ninitialise un tableau de struct?debutant [Borland c++ buider] Comment recuper la valeur d'un Edit ?
[Borland c++ builder] Impossible à installer :( [RTC]Addition de sizeof (i) au lieu de i
Plus de sujets relatifs à : [Borland] Sizeof(struct x) et AnsiString


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR