Was ist wenn lon nur zu haelfte gefuellt ist? darf ich da ueberhaupt sizeof() nehmen? oder gibt es eine funktion die nur die anzahl der zeichen vor der \0 zaehlt? volatile char lon[11]; sd_raw_write(myoffset,&lon,sizeof(lon)); myoffset++; sd_raw_sync();
> oder gibt es eine funktion die nur die anzahl der zeichen vor der \0 > zaehlt? strlen
Mit sizeof(lon) solltest du deine Adressbreite in Bytes bekommen. lon ist ja nur ein Pointer auf einen char, also speichert nur eine Adresse und ist daher auch nur so groß wie es für eine Adresse nötig ist. Das hat nix mit dem zu tun was hinter diesem Pointer steckt. Wie schon gesagt sucht du strlen() aus <string.h>.
quatsch. lon ist ebend kein pointer sondern ein char[11]. Das is in c ein kleiner aber feiner Unterschied. sizeof(lon) ist deswegen ebend 11.
tobi schrieb: > Mit sizeof(lon) solltest du deine Adressbreite in Bytes bekommen. lon > ist ja nur ein Pointer auf einen char, also speichert nur eine Adresse > und ist daher auch nur so groß wie es für eine Adresse nötig ist. Das > hat nix mit dem zu tun was hinter diesem Pointer steckt. Nein. lon ist kein Zeiger auf char. sizeof(lon) ist 11. Übrigens ist sizeof keine Funktion sondern ein Operator, der auf Typen angewandt wird, etwa
1 | size_t s = sizeof (int); |
Johann
Interessant wie oft hier dem Wort "Quatsch" ebensolcher folgt. >quatsch. lon ist ebend kein pointer sondern ein char[11]. Das is in c >ein kleiner aber feiner Unterschied. In gewissen Kontexten ist das das selbe; kann lon wie ein Zeiger verwendet werden. Z.B. ist &lon[0] das selbe wie lon. >sizeof(lon) ist deswegen ebend 11. Das ist allerdings richtig. Der Fragesteller schrieb jedoch: >Was ist wenn lon nur zu haelfte gefuellt ist? >darf ich da ueberhaupt sizeof() nehmen? >oder gibt es eine funktion die nur die anzahl der zeichen vor der \0 >zaehlt? Und die Antwort ist: Nein. Denn sizeof gibt die deklarierte Länge wieder, wenn sie zur Compilezeit bekannt ist. Nicht aber die Position der 0 (des Terminierungszeichens). Unabhängig davon, wünschte ich, das die Verwendung des Wortes "Quatsch" eingeschränkt, oder noch besser, aufgegeben wird. Ich empfinde das als Beleidigend.
Kopfnuss schrieb: > Interessant wie oft hier dem Wort "Quatsch" ebensolcher folgt. > >>quatsch. lon ist ebend kein pointer sondern ein char[11]. Das is in c >>ein kleiner aber feiner Unterschied. > In gewissen Kontexten ist das das selbe; kann lon wie ein Zeiger > verwendet werden. Z.B. ist &lon[0] das selbe wie lon. Hä? Was hat das eine mit dem anderen zu tun? *&lon[0]* ist nicht lon. Und lon ist eben ein char[11] und kein Pointer und das ist auch vollkommen richtig so. Da gibts nix dran zu drehen.
Ist es schonmal vorgekommen das Oberstudienrat Simon sich zu einer Frage äußert anstatt eine Antwort zu kommentieren?
Er hat aber Recht, lon ist ein Vektor und kein Zeiger. Aber ein Vektor kann in bestimmten Kontexten zu einem Zeiger zerfallen, aber nicht immer.
Stefan schrieb: > Ist es schonmal vorgekommen das Oberstudienrat Simon sich zu einer Frage > äußert anstatt eine Antwort zu kommentieren? Bin immer zu spät ;)
Sven P. schrieb: > Er hat aber Recht, lon ist ein Vektor und kein Zeiger. Aber ein Vektor > kann in bestimmten Kontexten zu einem Zeiger zerfallen, aber nicht > immer. Kopfnuss: > >quatsch. lon ist ebend kein pointer sondern ein char[11]. Das is in c > >ein kleiner aber feiner Unterschied. > In gewissen Kontexten ist das das selbe; kann lon wie ein Zeiger > verwendet werden. Z.B. ist &lon[0] das selbe wie lon. Ja, das schon. Aber, und das finde ich, ist ein wichtiges Detail, konvertiert das "Objekt" lon unter keinsten Umständen zu einem Pointer. Der Compier kann den Arraynamen zu einen Pointer konvertieren, dieser Pointer ist aber nicht unter lon gespeichert und deswegen kann man in diesem Fall lon nach wie vor nicht als Pointer behandeln. Und deswegen gibt sizeof bei lon nach wie vor auch die Größe des Arrays zurück, weil es immer noch ein Array ist. Der Pointer, in welcher das Array mal konvertiert wurde, liegt irgendwo flüchtig im Register oder RAM. Auf den kann man aber nicht zugreifen. Und ich denke darum ging es hier.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.