ANSI-C - zählen Sie die Größe der string-Zeiger
Ist es möglich, zu erstellen string-Variablen mit Zeigern? So dass ich don ' T haben zu gehen seine Größe immer, wie char x[4] = "aaa"?
Wie kann ich die Größe dieser Zeichenfolge?
Und kann ich Sie initialisieren eine leere Zeichenfolge, die mit einem Zeiger?
- Jede chance, Sie könnten dies klären ein wenig?
- Wenn Sie sagen, "gehen seine Größe" du meinst, als Funktionsparameter, wie ich vermute?
- 2 Bier + eine Menge von Ausschneiden und einfügen, lol, sorry, bearbeitet bereits 😛
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denken Sie daran, dass strings in C sind die damit endete, dass die null-terminator Charakter, wie geschrieben
\0
. Wenn Sie eine wohlgeformte Zeichenkette gespeichert, die in dem pointer-variable, Sie kann daher bestimmen Sie die Länge durch die Suche nach diesem Charakter:Falls Ihre Variablen noch nicht initialisiert sind oder sonst nicht wohlgeformt ist (z.B., indem Sie
NULL
) Sie kann natürlich nicht nehmen, diesen Ansatz, aber die meisten Funktionen werden allgemein geschrieben unter der Annahme, dass die Saiten sind gut gebildet, denn dies führt zu schnelleren code.Wenn Sie möchten, initialisieren Sie einen Zeiger, haben Sie drei Möglichkeiten:
NULL
eine gültige Adresse (z.B.char *x = &someCharVar
), oder eine string-Konstante (z.B.char *x = "hello"
). Beachten Sie, dass wenn Sie eine string-Konstante, Sie ist illegale für Sie zu schreiben, in die Zeiger, es sei denn, Sie neu zuordnen es mit der Adresse eines nicht-Konstanten string.Beachten Sie, dass
sizeof(char)
ist hier überflüssig, da einchar
ist immer definiert zu sein, genau 1 byte. Jedoch, es ist eine gute Angewohnheit, in zu erhalten, wenn Sie mit anderen Daten-Typen, und es hilft, machen Sie Ihren code selbst dokumentieren, indem Sie Ihre Absichten sehr klar.Wenn Sie initialisieren ein array von
char
mit einem string-literal, die Sie nicht brauchen, um die Größe festzulegen:Dadurch wird
str
wie ein 15-element-array vonchar
(die Größe wird aus der Länge der initiliazer, einschließlich der 0-terminator) und kopieren Sie den Inhalt des string-literal zu.Einem string-literal ist ein array-Ausdruck des Typs "N-element array von
char
" (const char
in C++). Außer wenn es verwendet wird, um ein array zu initialisieren, die in einer Erklärung (wie oben) oder ist der operand dersizeof
oder unäre&
Operatoren, die einen Ausdruck vom Typ "array vonT
" umgewandelt werden, um einen Ausdruck vom Typ "Zeiger aufT
", und der Wert des Ausdrucks wird die Adresse des ersten Elements des Arrays.Wenn Sie schreiben,
den Ausdruck "Dies ist ein test" wird umgewandelt vom Typ "15-element-array von
char
" zu "Zeiger aufchar
", und der Wert des Ausdrucks ist Adresse des ersten Zeichens, das geschrieben wird, um die variablestr
.Des Verhaltens auf dem Versuch, ändern Sie den Inhalt von einem string-literal ist undefined; einige Plattformen speichern von string-literalen in nur-lese-Speicher, manche nicht. Einige anzeigen mehrfache vorkommen des gleichen string-literal zu einer einzigen Instanz, andere nicht. Es ist am besten zu behandeln immer ein literaler string als unveränderliche, das ist, warum ich erklärte
str
alsconst char *
statt nurchar *
.Um die Länge einer Schnur, verwenden
strlen
:Das liefert die Anzahl der Zeichen im string, bis zu (aber nicht einschließlich) der 0-terminator;
strlen("This is a test")
zurück 14.Um die Größe des Puffers mit der Zeichenkette, die Sie verwenden würden, die
sizeof
Betreiber:Beachten Sie, dass diese nicht geben Sie die Größe des Puffers, wenn Sie erklärt
str
wie ein Zeiger, wieIn diesem Fall
sizeof str;
gibt dir nur die Größe eineschar *
, nicht die Zeichenfolge es Punkte zu.