webentwicklung-frage-antwort-db.com.de

Ermitteln der Länge eines Zeichen-Arrays in C

Wie kann man in C die Länge eines Character-Arrays ermitteln? 

Ich werde gerne Pseudo-Code akzeptieren, bin aber nicht abgeneigt, wenn jemand es schreibt, wenn er möchte :)

41
not_l33t

Vorausgesetzt, das char-Array ist null terminiert,

char chararray[10];
size_t len = strlen(chararray);
65
Daniel A. White

Wenn Sie ein Array haben, können Sie die Anzahl der Elemente im Array ermitteln, indem Sie die Größe des Arrays in Bytes durch die Größe jedes Elements in Bytes teilen:

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

Für den speziellen Fall char ergibt sizeof(char) == 1 dasselbe Ergebnis, da sizeof(x) das gleiche Ergebnis liefert.

Wenn Sie nur einen Zeiger auf ein Array haben, gibt es keine Möglichkeit, die Anzahl der Elemente im angezeigten Array zu ermitteln. Sie müssen das selbst nachverfolgen. Zum Beispiel gegeben:

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

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

Dafür 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 die Größe des Arrays irgendwie ermitteln können, indem Sie dessen Inhalt analysieren (dies ist praktisch die Funktion von mit Null abgeschlossenen Zeichenfolgen : Sie platzieren ein '\0'-Zeichen am Ende der Zeichenfolge, damit Sie wissen, wann die Zeichenfolge endet.

13
James McNellis

Hallo, obwohl die obigen Antworten in Ordnung sind, hier ist mein Beitrag zu Ihrer Frage.

//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 der Funktion main rufen Sie die Funktionsgröße auf, indem Sie die Adresse des ersten Elements Ihres Arrays ..__ übergeben. Beispiel:

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

Alles Gute

7
SteveMoros

Wenn Sie möchten, dass die Länge des Zeichen-Arrays sizeof(array)/sizeof(array[0]) verwendet, verwenden Sie für die Länge der Zeichenfolge strlen(array).

5
onemasse

Sie können strlen verwenden

strlen(urarray);

Sie können es selbst programmieren, 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 wünschen, verwenden Sie sizeof

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

Es gibt auch eine kompakte Form dafür, wenn Sie sich nicht auf strlen verlassen wollen. Angenommen, das Zeichenfeld, das Sie in Betracht ziehen, ist "msg": 

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

Mit "Zeichenarray" meinen Sie eine Zeichenfolge? Wie "hallo" oder "hahaha ist dies eine Zeichenkette" ..

Verwenden Sie trotzdem strlen () . Lesen Sie etwas darüber, es gibt viele Informationen darüber, wie hier .

0
Poni

mit sizeof ()

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

mit string.h

#include <string.h>

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

verwendung von 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;
}
0
X Stylish