C Durchlaufen char-Arrays mit einem Zeiger
Ich bin sehr neu in C und wollte Fragen, wie man jedes element eines Arrays mit einem pointer. Das ist einfach, wenn und nur wenn Sie wissen, die Größe des Arrays.
So lassen Sie den be-code:
#include <stdio.h>
int main (int argc, string argv[]) {
char * text = "John Does Nothing";
char text2[] = "John Does Nothing";
int s_text = sizeof(text); //returns size of pointer. 8 in 64-bit machine
int s_text2 = sizeof(text2); //returns 18. the seeked size.
printf("first string: %s, size: %d\n second string: %s, size: %d\n", text, s_text, text2, s_text2);
return 0;
}
Nun möchte ich Sie bestimmen die Größe der text
. um dies zu tun, fand ich heraus, dass der String endet mit einem '\0'
Charakter. Also schrieb ich die folgende Funktion:
int getSize (char * s) {
char * t; //first copy the pointer to not change the original
int size = 0;
for (t = s; s != '\0'; t++) {
size++;
}
return size;
}
Diese Funktion jedoch nicht funktionieren, da die Schleife scheint nicht kündigen.
So, ist es ein Weg, um die tatsächliche Größe der char
s der Zeiger zeigt auf?
- Leider ändert sich nichts am Ergebnis. egal, ob ich
s != '\0'
oder*s != '\0'
odert != '\0'
oder*t != '\0'
landet es immer noch nicht beenden... - Du bist reimplementing
strlen
. - Ihre Funktion nicht verwenden
s
, so was ist der Punkt bei der Erhaltung der "original" Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle der überprüfung der Zeiger, die Sie haben, um den aktuellen Wert. Sie können es so machen:
Oder prägnanter:
for (t = s; *t; t++) {}
(Sie zumindest in der';'
auf einer eigenen Zeile-das war gut)Ist ein Tippfehler in dieser for-Schleife
Ich denke du meinst
Dennoch im Allgemeinen die Funktion nicht ein Wert ist, entspricht der zurückgegebene Wert vom Betreiber
sizeof
selbst wenn Sie zählen auch die abschließende null. Stattdessen bietet es einen Wert, entspricht der zurückgegebene Wert von der standard-Funktionstrlen
.Beispielsweise vergleichen Sie die Ausgabe dieses code-snippet
Damit Ihre Funktion berechnet die Länge einer Zeichenkette.
Wäre es korrekter zu definieren es folgendermaßen (mit Zeigern)
getSize
sollte wirklichgetlen
...