Sizeof gibt den falschen Wert aus ?!?
-
Hi, versuche gerade mit der Funktion sizeof() zu arbeiten. Doch leider bekomme ich keinen richtigen Werte raus. Das Sizeof gibt mir hier immer den Wert 4 aus statt die zu erwartenden 25. Zähle ich jedoch den Index hoch bis das Zeichen '\0' kommt bekomme ich den richtigen Wert von 24 (24, da ja das \0 nicht mitgezählt wird). Kann mir das einfach nicht erklären.
Am Ende soll das Programm einen übergebenen String umgedreht ausgeben.
Hier mein Quelltext:
#include <stdio.h> #include <stdlib.h> void drehen(char*); int main(void) { char * array= "Das ist ein Test- String"; int s = sizeof (array); printf ("%d %s\n",s,array); drehen(array); return 0; } void drehen (char * string) { int z=0,i=0; while (string[z]!='\0') {z++;} printf("%d\n",z+1); char *array; array = (char *) malloc((z+1)*sizeof(char)); int s = sizeof (array); printf("%d\n",s); int size=sizeof(array); size--; array[size]='\0'; while (string[i]!='\0') { size--; array[size]=string[i]; i++; } printf("%s\n",array); }
Hoffe jemand hat einen Tip für mich.
mfg
-
strlen() benutzen. sizeof liefert 4 zurück, weil die Größe des Pointers array 4 ist.
-
Streetdevil schrieb:
Hi, versuche gerade mit der Funktion sizeof() zu arbeiten.
'sizeof' ist übrigens keine funktion, auch wenn's so aussieht.
-
Vielen dank für die Antworten.
@ feigling
Kann ich das so verstehen das jeder Pointer eine Größe von 4 Byte besitzt? Oder ist das nur in diesem speziellen Fall so?
@ Globoli
Wie darf ich das verstehen? Was ist sizeof dann, wenn es keine Funktion ist?
-
Streetdevil schrieb:
Kann ich das so verstehen das jeder Pointer eine Größe von 4 Byte besitzt? Oder ist das nur in diesem speziellen Fall so?
Nein. Auf einem 32-Bit-System wird es zwar idR so sein, aber es gibt auch andere Systeme wo Pointer nicht 4Byte groß sind. Und dann ist auch nicht sicher, ob alle Zeiger auf einem System immer gleich groß sind.
Streetdevil schrieb:
Wie darf ich das verstehen? Was ist sizeof dann, wenn es keine Funktion ist?
Es ist ein Operator.
-
Vielen Dank!