sizeof liefert zu viel zurück
-
hi,
ich habe folgende struktur:
typedef struct tagSUPHEADER { short check; short version; short type; int buflen; char *buf; } SUPHEADER, *PSUPHEADER;
nach meinen berechnungen müsste sizeof(SUPHEAER) eigentlich 2+2+2+4+4 = 14 zurückliefern, allerdings liefert es 16 zurück, aber wieso?
-
http://www.c-plusplus.net/forum/viewtopic.php?t=96914
BTW: Was hat deine Frage in diesem Forum zu suchen?
-
Wer hat dir denn gesagt, wie groß die Basisdatentypen auf deinem System bei deinem Compiler sind?
Die sind u.U. von System zu System anders, d.h. falls deine Wissenquelle eine Website oder ähnliches ist hat man vergessen das zu erwähnen.
MfG.
-
hm, sry, aber der link nützt mir nicht viel, da wird eigentlich nur gestreitet
jedenfalls bräuchte ich ein genaues Ergebnis bei sizeof, weil ich genau so viele Bytes über sockets versenden will.
-
Herr-Vorragend schrieb:
jedenfalls bräuchte ich ein genaues Ergebnis bei sizeof, weil ich genau so viele Bytes über sockets versenden will.
Dann musst du deinem Compiler sagen, dass er keine Füllbytes zwischen die Member packen soll. Bist du sicher, dass du einen Zeiger über einen Socket schicken willst? Der Empfänger wird damit nicht viel anfangen können.
-
http://www.prompt.com/pwprod/pilot/online/node53.html
das sollte es ja wohl erklären.
wie du das abschaltest hat was mit deinem compiler zu tun.
-
Herr-Vorragend schrieb:
hm, sry, aber der link nützt mir nicht viel, da wird eigentlich nur gestreitet
jedenfalls bräuchte ich ein genaues Ergebnis bei sizeof, weil ich genau so viele Bytes über sockets versenden will.
Dafür brauchst du doch nicht sizeof-Werte wissen!
Du kannst ja auch bei den funktionen send() und recv() einfach eine Variable als Buffersize angeben, der du am ANfang sizeof(struktur) zugeordnet hast.MfG.
-
Dieser Thread wurde von Moderator/in cd9000 aus dem Forum WinAPI in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Herr-Vorragend schrieb:
jedenfalls bräuchte ich ein genaues Ergebnis bei sizeof, weil ich genau so viele Bytes über sockets versenden will.
Du willst eine struct über einen socket verschicken? Ganz schlechte Idee, zumindest wenn Du portabel bleiben willst. Was machst Du, wenn auf der Gegenseite zwar das gleiche Programm, aber mit einem anderen Compiler kompiliert, sitzt?
Lieber nur atomare Typen verschicken, dann hast Du zumindest keine Probleme mit unterschiedlichem Padding.
-
Lieber nur atomare Typen verschicken, dann hast Du zumindest keine Probleme mit unterschiedlichem Padding.
Das Padding ist ja wohl nicht wirklich das Problem. Das kann man doch bei jeden Compiler einstellen.
-
Ja, bei jedem Compiler anders. Portabel programmieren heisst eben NICHT, für jeden Compiler 'ne Sonderbehandlung einzubauen.
-
@SG1: Um portable Socket-Programme zu schreiben muss man mit Strings arbeiten, hab ich recht??
-
Nein, man kann auch ints portabel über die Leitung schicken. Dafür gibts htonl und ntohl.