Länge des Char-Arrays ermitteln

Lesezeit: 4 Minuten

Benutzer-Avatar
Nikhil

Ich habe einen Code wie folgt:

int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);

Hier möchte ich die Länge des Arrays finden a in c? Wie kann dies geschehen?

  • Gibt Ihr Code irgendwelche Fehler zurück?

    – Sai Kalyan Kumar Akshinthala

    27. Mai 2011 um 9:24 Uhr

  • NEIN, es wird nur 7 als Antwort angezeigt.

    – Nikhil

    27. Mai 2011 um 9:25 Uhr


  • Ich denke, Sie wollen strlen(), aber weil Ihr erstes Zeichen 0 ist, erhalten Sie 0.

    – ColWhi

    27. Mai 2011 um 9:26 Uhr

  • Sie haben Ihr Array als deklariert a[7] also würde sizeof offensichtlich 7 zurückgeben.

    – Naveen

    27. Mai 2011 um 9:28 Uhr

  • ja, benutze nicht sizeof, sondern debugge es ab 1 val, u’ll c leere Werte nach 4

    – MLS

    27. Mai 2011 um 9:32 Uhr


Benutzer-Avatar
Jo

Per Konvention sind C-Strings ‘nullterminiert’. Das bedeutet, dass am Ende ein zusätzliches Byte mit dem Wert Null (0x00). Jede Funktion, die etwas mit einer Zeichenfolge macht (wie z printf) betrachtet eine Zeichenfolge als beendet, wenn sie null findet. Das bedeutet auch, dass, wenn Ihre Zeichenfolge nicht nullterminiert ist, sie weiterläuft, bis sie ein Nullzeichen findet, was zu einigen interessanten Ergebnissen führen kann!

Da das erste Element in Ihrem Array 0x00 ist, wird es als Länge Null (keine Zeichen) betrachtet.

Wenn Sie Ihre Zeichenfolge wie folgt definiert haben:

char a[7]={0xdc,0x01,0x04,0x00};

zB nullterminiert

dann kannst du verwenden strlen um die Länge der im Array gespeicherten Zeichenfolge zu messen.

sizeof misst die Größe einer Schrift. Es ist nicht das, was Sie wollen. Denken Sie auch daran, dass die Zeichenfolge in einem Array kürzer sein kann als die Größe des Arrays.

  • Die Länge des Arrays beträgt 7. Null ist die Länge der Zeichenfolge, die im Array gespeichert wird.

    – MM

    4. September 2014 um 10:19 Uhr

  • Ich denke, es ist klar, dass er die Länge der Saite wissen möchte nicht das Array, da er weiß, dass die Länge des Arrays 7 ist (siehe seine Frage + Kommentare) und dies für “falsch” hält. Ich habe vorsichtig gesagt, dass strlen die Länge der Zeichenfolge angibt, aber ich habe eine Klarstellung hinzugefügt. Ich denke, die Frage ergibt sich aus der Tatsache, dass er die Länge der Zeichenfolge wissen möchte, aber verwirrt ist (daher der Fragentitel), weil sie nicht gleich der Länge des Arrays ist.

    – Jo

    4. September 2014 um 11:27 Uhr


sizeof gibt die Größe des Variablentyps in Bytes zurück. In Ihrem Fall gibt es also die Größe Ihrer zurück char[7] welches ist 7 * sizeof(char). Seit sizeof(char) = 1das Ergebnis ist 7.

Erweitern Sie dies auf ein weiteres Beispiel:

int intArr[5];
printf("sizeof(intArr)=%u", sizeof(intArr));

ergäbe 5 * sizeof(int)also würden Sie das Ergebnis “20” erhalten (zumindest auf einer regulären 32-Bit-Plattform. Auf anderen sizeof(int) kann abweichen)

Um auf dein Problem zurückzukommen:

Es scheint, dass Sie die Länge der Zeichenfolge wissen möchten, die in Ihrem Array enthalten ist, und nicht die Gesamtgröße des Arrays.

Per Definition müssen C-Strings mit einem nachgestellten ‘\0’ (0-Byte) abgeschlossen werden. Um also die passende Länge des in Ihrem Array enthaltenen Strings zu erhalten, müssen Sie den String zuerst beenden, damit Sie wissen, wann er fertig ist. Sonst gäbe es jetzt Weg zu wissen.

Alle Standardfunktionen bauen auf dieser Definition auf, also wenn Sie anrufen strlen um die abzurufen Str ing len gth durchläuft es das angegebene Array, bis es das erste 0-Byte findet, was in Ihrem Fall das allererste Element wäre.

Eine andere Sache, die Sie möglicherweise nur wissen müssen, weil Sie die verbleibenden Elemente Ihrer nicht ausfüllen char[7] mit einem Wert enthalten sie tatsächlich zufällige undefinierte Werte.

Hoffe das hat geholfen.

Wenn Sie erwarten 4 als Ausgabe versuchen Sie dann Folgendes:

verkohlen a[]={0x00,0xdc,0x01,0x04};

Sie können dies versuchen:

   char tab[7]={'a','b','t','u','a','y','t'};
   printf("%d\n",sizeof(tab)/sizeof(tab[0]));

Du kannst tun len = sizeof(a)/sizeof(*a) für jede Art von Array. Aber Sie haben es als initialisiert a[7] = {...} was bedeutet, dass seine Länge 7 ist …

  • sizeof(a) gibt Ihnen die Größe des Zeigers, nicht des Arrays.

    – Oleg Waskewitsch

    4. Dezember 2012 um 1:38 Uhr

  • Ich denke, es gibt Ihnen in diesem Fall die Größe des Arrays. Wenn das Array mit new erstellt wurde, gibt es Ihnen die Größe des Zeigers

    – Mayank

    9. Januar 2013 um 10:02 Uhr

  • Ja, ich weiß nicht, warum ich meinen vorherigen Kommentar geschrieben habe. 🙂

    – Oleg Waskewitsch

    4. September 2014 um 14:02 Uhr

Benutzer-Avatar
IT_Tau

Wenn jemand nach einer schnellen Lösung dafür sucht, hier ist, wie Sie es tun.

while (array[i] != '\0') i++;

Die Variable ich enthält die verwendete Länge des Arrays, nicht das gesamte initialisierte Array. Ich weiß, es ist ein später Beitrag, aber vielleicht hilft es jemandem.

  • sizeof(a) gibt Ihnen die Größe des Zeigers, nicht des Arrays.

    – Oleg Waskewitsch

    4. Dezember 2012 um 1:38 Uhr

  • Ich denke, es gibt Ihnen in diesem Fall die Größe des Arrays. Wenn das Array mit new erstellt wurde, gibt es Ihnen die Größe des Zeigers

    – Mayank

    9. Januar 2013 um 10:02 Uhr

  • Ja, ich weiß nicht, warum ich meinen vorherigen Kommentar geschrieben habe. 🙂

    – Oleg Waskewitsch

    4. September 2014 um 14:02 Uhr

1371270cookie-checkLänge des Char-Arrays ermitteln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy