Forum: Mikrocontroller und Digitale Elektronik sizeof von Stringarray


von size (Gast)


Lesenswert?

1
uint16_t Fkt(uint8_t *Wort, uint8_t *Buf)
2
{
3
4
  uint16_t Wortsize = sizeof(Wort);
5
...
6
}
7
8
9
ret = Fkt("MeinWort", &MeinBuf);

Das Problem ist, Wortsize ergibt beim Debuggen stets 4.

Woran liegt es?

von Gerald (Gast)


Lesenswert?

size schrieb:
> Das Problem ist, Wortsize ergibt beim Debuggen stets 4.
>
> Woran liegt es?
Wort ist als Zeiger definiert. Du arbeitest offensichtlich auf einem 
32-Bit-System. Da sind die Zeiger 4 Byte groß...

von Dirk B. (dirkb2)


Lesenswert?

C-Grundlagen!

Wort ist ein Zeiger. Und mit sizeof bekommst du die Größe vom Zeiger und 
nicht von dem, worauf er zeigt.

Du musst die Größe mit einem weiteren Parameter übergeben.

von size (Gast)


Lesenswert?

ja die Vermutung hatte ich auch schon, aber wie muss ich das denn nun 
machen, dass ich die Anzahl an Buchstaben in meinem Array bekomme?

von Falk B. (falk)


Lesenswert?

@ size (Gast)

>Das Problem ist, Wortsize ergibt beim Debuggen stets 4.

Logisch, das ist die Länge des POINTERS wort, welcher ein Pointer auf 
einen Char ist. Die Länge deines Strings kann man so nicht ermittlen, 
dafür gibt es die Funktion strlen(); Die Länge eines allgemenen Arrays 
kann so auch nicht bestimmt werden, das geht nur mit konstanten Arrays. 
über ein Pointer geht es nie! Und Arrays/Strings werden in C IMMER als 
Pointer übergeben.
1
char meinstring[] = "Hallo Welt";
2
3
int l = sizeof(meinstring);

von Ordner (Gast)


Lesenswert?

Benutze strlen() ;

http://stackoverflow.com/questions/15000544/get-string-size-in-bytes-in-c

Stackoverflow ist IMHO eh die bessere Adresse für Fragen zur 
Programmierung.

von Dirk B. (dirkb2)


Lesenswert?

Wenn es ein C-String ist (da wäre char* besser), kannst du dies durch 
suchen des Stringterminators '\0' feststellen (das macht strlen).

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

sizeof bei einem Array funktioniert dort, wo das Array auch definiert 
ist.

Dann liefert es die Größe (in Bytes) vom Array und nicht die Anzahl 
Zeichen, die dort abgelegt sind.

In deinem Fall ist das Stringliteral auch nur ein const char*. Du darfst 
es also nicht verändern

von DanVet (Gast)


Lesenswert?

es gibt die Funktion
strlen(Wort);
Wenn du weißt, dass du einen String verwendest, dann bekommst du so die 
Länge

von THOR (Gast)


Lesenswert?

Ordner schrieb:
> Benutze strlen() ;
>
> http://stackoverflow.com/questions/15000544/get-st...
>
> Stackoverflow ist IMHO eh die bessere Adresse für Fragen zur
> Programmierung.

Da müsste man Englisch für können. Das ist für den modernen Copypaste 
Programmierer natürlich eine Hürde.

von Dirk B. (dirkb2)


Lesenswert?

THOR schrieb:
> Ordner schrieb:
>> Benutze strlen() ;
>>
>> http://stackoverflow.com/questions/15000544/get-st...
>>
>> Stackoverflow ist IMHO eh die bessere Adresse für Fragen zur
>> Programmierung.
>
> Da müsste man Englisch für können. Das ist für den modernen Copypaste
> Programmierer natürlich eine Hürde.

Egal, die Antwort mit der höchsten Zustimmung wird kopiert und solange 
verändert, bis der Compiler nicht mehr meckert.

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.