Forum: Compiler & IDEs sizeof


von Markus M. (seeadler78)


Lesenswert?

Hallo
Ich fange gerade erst mit C an zu programmieren.Jetzt habe ich ein
Array
von der Länge,wie ich sie mit char Zeichen fülle.Um die Anzahl der
Elemente herauszufinden wollte ich den sizeof Befehl verwenden.
Bei der Eingabe sizeof(wort);
bekomme ich eine Fehlermeldung.Fehlt noch eine include Datei,oder muss
ich es anders schreiben.
danke

von Markus M. (seeadler78)


Lesenswert?

Hallo
Tschuldigung hat sich erledigt.schäämm.

von Karl heinz B. (kbucheg)


Lesenswert?

Schämen solltest du dich dafür, dass

* du einen Frage zu existierendem Code schreibst
  ohne auch nur ein Fitzelchen des Codes herzuzeigen

* du von einer Fehlermeldung schreibst, ohne den exakten
  Text der Fehlermeldung zu schreiben. Das wenigste wäre
  eine Kurzzusammenfassung des Fehlertextes in deinen eigenen
  Worten.
  Zitat: "Du gehst ja auch nicht zum Doktor und sagst: Es tut weh"

Ansonsten gibt es keinen Grund sich zu schämen. Jeder hat
mal Tomaten auf den Augen.

von Peter D. (peda)


Lesenswert?

Schämen solltest du dich dafür, dass

Du willst, daß andere den Fehler auch selber machen müssen.


Wenn man schon postet, Problem gelöst, dann aber wenigstens auch wie.


Peter

von Selecta (Gast)


Lesenswert?

sizeof geht nur bei statischen strukturen (z.B. sizeof(int),
sizeof(struct str))
Man kann damit nicht die Größe von dynamischen Datenstrukturen
erkennen!!!

von Rolf Magnus (Gast)


Lesenswert?

> Man kann damit nicht die Größe von dynamischen Datenstrukturen
> erkennen!!!

Was allerdings nichts ausmacht, da C sowieso ein statisches Typsystem
hat und es damit gar keine "dynamischen Datenstrukturen" gibt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Selecta meinte wohl eher, daß

  char* p;

  p = (char *) malloc(1234);

  printf("%d", sizeof (p));

nicht zur Ausgabe von 1234 führt ...

von Selecta (Gast)


Lesenswert?

Ja, genau das habe ich gemeint!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> es damit gar keine "dynamischen Datenstrukturen" gibt.

Naja, halb und halb.  Das letzte Element einer struct darf eine
unbestimmte Länge haben.  sizeof() ermittelt in diesem Falle
nur die statisch bekannte Größe des Objekts.

(Im Jahr 2007 reden wir über C99.)

von Karl heinz B. (kbucheg)


Lesenswert?

:-)
Wenn ich auch noch mal darf:

Der OP redet von einem Array und nicht von einer Struktur.

<gemein werdend>
Strukturen sind nämlich für 90% aller Poster hier sowieso
viiiiiiel zu high-tech. Da muss man schon froh sein, wenn
ein Fragesteller mit einem Array richtig umgehen kann.
</gemein werdend, aber das musste ich mal loswerden>

von Unbekannter (Gast)


Lesenswert?

Hi,

<bisschenofftpopic>
Sizeof ist übrigens ein Operator und keine Funktion. Es heißt also
nicht "sizeof(variable)" sonder "sizeof variable".

(wenn man die größe eines datentyps wissen will muss man natürlich
sizeof (int) o.ä. schreiben
</bisschenofftpopic>

von Unbekannter (Gast)


Lesenswert?

<nochmalofftopic>
 p = (char *) malloc(1234);

Sollte in C nicht gecastet werden, malloc gibt einen void-zeiger
zurück, der einen char * zugewiesen wird, wird also implizit gecastet
und verbirgt nur Fehlermeldungen.

Rufus programmiert wohl auch C++ ;-)
</nochmalofftopic>

von Rolf Magnus (Gast)


Lesenswert?

> ... wird also implizit gecastet und verbirgt nur Fehlermeldungen.

<nitpick>
Es gibt keine impliziten Casts. Der Cast ist das, was man hinschreibt,
wenn man explizit eine Konvertierung anfordert.
</nitpick>

von Unbekannter (Gast)


Lesenswert?

Ok, hast recht, es ist eine implizite Typumwandlung, cast ist das
falsche Wort.

von Thomas (Gast)


Lesenswert?

Lass dich doch nicht einschüchtern. "Cast" ist der englischsprachige
Begriff für Typumwandlung. Daran ist absolut nichts falsch oder was
denkt Rolf, wie ein englisch sprechender Programmierer eine implizite
Typumwandlung nennen würde?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Lass dich doch nicht einschüchtern.

Du bist hier irgendwie im falschen Film

> "Cast" ist der englischsprachige
> Begriff für Typumwandlung.

Ein typecast hat in C eine ganz genau definierte Bedeutung.

> ..., wie ein englisch sprechender Programmierer eine implizite
> Typumwandlung nennen würde?

type coercion oder argument promotion, je nach Kontext.

von Rolf Magnus (Gast)


Lesenswert?

> "Cast" ist der englischsprachige Begriff für Typumwandlung. Daran
> ist absolut nichts falsch

In C (und meines Wissens auch den meisten anderen Sprachen, die sowas
haben) ist es falsch. Da ist genau festgelegt, was der Begriff "cast"
bedeutet. Hier mal ein Ausschnitt aus der Definition:

6.3 Conversions
1 Several operators convert operand values from one type to another
  automatically. This subclause speci&#64257;es the result required
from
  such an implicit conversion, as well as those that result from a
  cast operation (an explicit conversion).

> oder was denkt Rolf, wie ein englisch sprechender Programmierer
> eine implizite Typumwandlung nennen würde?

implicit type conversion?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.