mikrocontroller.net

Forum: Compiler & IDEs sizeof


Autor: Markus Muelln (seeadler78)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Muelln (seeadler78)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Tschuldigung hat sich erledigt.schäämm.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Selecta (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selecta meinte wohl eher, daß

  char* p;

  p = (char *) malloc(1234);

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

nicht zur Ausgabe von 1234 führt ...

Autor: Selecta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, genau das habe ich gemeint!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hast recht, es ist eine implizite Typumwandlung, cast ist das
falsche Wort.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.