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 🙂
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 🙂
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_t
die 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 char
seit 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_t
die 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
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
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));
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)
.
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++;
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;
}
Sie meinen, außer nach der NUL zu suchen?
– Ignacio Vazquez-Abrams
15. November 2010 um 1:44 Uhr
Entweder
strlen()
entwedersizeof()
. 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