Ermitteln der Länge eines Zeichenarrays in C

Lesezeit: 5 Minuten

Benutzeravatar von not_l33t
not_l33t

Was ist ein Weg in C, dass jemand die Länge eines Zeichenarrays finden könnte?

Ich akzeptiere gerne Pseudo-Code, bin aber nicht abgeneigt, wenn jemand ihn aufschreibt, wenn er möchte 🙂

  • Sie meinen, außer nach der NUL zu suchen?

    – Ignacio Vazquez-Abrams

    15. November 2010 um 1:44 Uhr

  • Entweder strlen()entweder sizeof(). Es hängt davon ab, was Sie brauchen.

    – ruslik

    15. November 2010 um 1:46 Uhr


  • Ein String ist eine bestimmte Art von gespeichertem Objekt in ein Zeichenarray (ein Zeichenarray darf keine Zeichenkette enthalten)

    Benutzer166390

    15. November 2010 um 1:50 Uhr


  • @pst: Die Frage ist so vage, dass wir sie beliebig interpretieren können. Ob unsere Interpretation richtig ist, hängt davon ab, was der Fragesteller zurückgibt.

    – Ignacio Vazquez-Abrams

    15. November 2010 um 1:51 Uhr

  • @pst In Anbetracht der Art und Weise, wie das OP die Frage gestellt hat, haben wir das Recht, alles anzunehmen.

    – ruslik

    15. November 2010 um 1:52 Uhr


Benutzeravatar von Daniel A. White
Daniel A. Weiß

Vorausgesetzt, das char-Array ist null beendet,

char chararray[10] = { 0 };
size_t len = strlen(chararray);

  • sizeof() und strlen() beide kehren zurück size_tdie sich von unterscheidet int dass es möglicherweise größer oder kleiner und sicherlich nicht signiert ist.

    – Chris Lutz

    15. November 2010 um 1:55 Uhr

  • Beachten Sie, dass in dem angegebenen Beispiel strlen(chararray) 0 zurückgibt, da das Array leer ist.

    – Generisches Ratzlachen

    12. August 2020 um 15:10 Uhr

  • Bitte beachten Sie, dass strlen nur die Länge bis zum Nullterminator angibt. Zum Beispiel ist Ihr Chararray-Contatin folgenden Einträgen chararray[0] = 'a'; chararray[1] = 'b'; chararray[6] = 'c'; chararray[7] = 'd'; Es wird die Länge als 2 zurückgeben, da es einen Null-Terminator bei Index 2 findet

    – Oschada

    10. Mai um 8:37 Uhr


Wenn Sie haben eine Anordnungdann können Sie die Anzahl der Elemente im Array ermitteln, indem Sie die Größe des Arrays in Byte durch die Größe jedes Elements in Byte dividieren:

char x[10];
int elements_in_x = sizeof(x) / sizeof(x[0]);

Für den speziellen Fall von charseit sizeof(char) == 1, sizeof(x) wird das gleiche Ergebnis liefern.

Wenn Sie nur haben ein Zeiger auf ein Array, dann gibt es keine Möglichkeit, die Anzahl der Elemente im Array, auf das gezeigt wird, zu finden. Das musst du selbst im Auge behalten. Zum Beispiel gegeben:

char x[10];
char* pointer_to_x = x;

es gibt keine Möglichkeit, von nur zu sagen pointer_to_x dass es auf ein Array von 10 Elementen zeigt. Sie müssen diese Informationen selbst verfolgen.

Dazu gibt es zahlreiche Möglichkeiten: Sie können entweder die Anzahl der Elemente in einer Variablen speichern oder den Inhalt des Arrays so codieren, dass Sie seine Größe irgendwie durch Analysieren seines Inhalts ermitteln können (das ist effektiv das, was nullterminierte Zeichenfolgen tun : sie platzieren a '\0' Zeichen am Ende der Zeichenfolge, damit Sie wissen, wann die Zeichenfolge endet).

  • sizeof() und strlen() beide kehren zurück size_tdie sich von unterscheidet int dass es möglicherweise größer oder kleiner und sicherlich nicht signiert ist.

    – Chris Lutz

    15. November 2010 um 1:55 Uhr

  • Dies sollte die akzeptierte Antwort sein. Es wird die Größe des initialisierten Arrays zurückgegeben.

    – LBenutzer

    20. März 2020 um 18:26 Uhr

Benutzeravatar von SteveMoros
SteveMoros

Obwohl die früheren Antworten in Ordnung sind, hier ist mein Beitrag.

//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
    //variable used to access the subsequent array elements.
    int offset = 0;
    //variable that counts the number of elements in your array
    int count = 0;

    //While loop that tests whether the end of the array has been reached
    while (*(ptr + offset) != '\0')
    {
        //increment the count variable
        ++count;
        //advance to the next element of the array
        ++offset;
    }
    //return the size of the array
    return count;
}

In Ihrer Hauptfunktion rufen Sie die Größenfunktion auf, indem Sie die Adresse des ersten Elements Ihres Arrays übergeben.

Zum Beispiel:

char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));

  • Warum eine separate Variable für den Offset, wenn Sie einfach count verwenden könnten? Hier ist eine kürzere (aber schwerer verständliche) Version: int strlen(const char* pStr){ int i = 0; while (*pStr) { ++i; } return i; }

    – GeteiltdurchNull

    25. Mai 2015 um 15:27 Uhr


  • char myArray[] = {‘h’, ‘e’, ​​’l’, ‘l’, ‘o’}; endet nicht automatisch mit ‘\0’. Sie müssen myArray manuell ‘\0’ zuweisen. meinArray[6] = ‘\0’; zumindest auf meinem macOS. g++ 4.2.1, Apple LLVM-Version 9.1.0 (clang-902.0.39.2)

    – 1234

    25. November 2019 um 20:06 Uhr


  • wenn Sie char myArray verwenden[] = “Hallo”; dann funktioniert dein Code.

    – 1234

    25. November 2019 um 20:18 Uhr

Benutzeravatar von dco
dco

Sie können Strlen verwenden

strlen(urarray);

Sie können es selbst codieren, damit Sie verstehen, wie es funktioniert

size_t my_strlen(const char *str)
{
  size_t i;

  for (i = 0; str[i]; i++);
  return i;
}

Wenn Sie die Größe des Arrays möchten, verwenden Sie sizeof

char urarray[255];
printf("%zu", sizeof(urarray));

Benutzeravatar von onemasse
eine Masse

Wenn Sie die Länge des Zeichenarrays verwenden möchten sizeof(array)/sizeof(array[0])wenn Sie die Länge der Zeichenfolge verwenden möchten strlen(array).

Benutzeravatar von Imre Kiss
Imre Kuss

Auch dafür gibt es eine kompakte Form, falls Sie sich nicht auf Strlen verlassen wollen. Angenommen, das von Ihnen in Betracht gezogene Zeichenarray ist “msg”:

  unsigned int len=0;
  while(*(msg+len) ) len++;

Benutzeravatar von Beyondo
Jenseits

verwenden Größe von()

char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5

verwenden string.h

#include <string.h>

char h[] = "hello";
printf("%d\n",strlen(h)); //Output = 5

verwenden Funktion (strlen Implementierung)

int strsize(const char* str);
int main(){
    char h[] = "hello";
    printf("%d\n",strsize(h)); //Output = 5
    return 0;
}
int strsize(const char* str){
    return (*str) ? strsize(++str) + 1 : 0;
}

1419540cookie-checkErmitteln der Länge eines Zeichenarrays in C

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

Privacy policy