sizeof() bei char[11] ?

Gast #1298610
Lesenswert?

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>.
Persönliche Seite #1298622
Lesenswert?

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
Gast #1298635
Lesenswert?

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.
Persönliche Seite #1298645
Lesenswert?

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.
Persönliche Seite #1299507
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren