sizeof(char*)
gibt Ihnen die Größe des char*
Zeigers (welcher 4 auf Ihrem System ist).
sizeof(str2)
gibt Ihnen die Größe des Arrays str2
. Es gibt 8 Elemente, jedes ist ein Zeigertyp. Also die Gesamtgröße auf Ihrem System ist 8 x 4 = 32.
Um die Länge eines Strings zu erhalten, verwenden Sie strlen
.
Betrachten Sie std::vector<std::string>>
als Alternative in C ++.
Sie können die Länge eines Arrays nicht kennen, wenn Sie nur einen Zeiger darauf haben. Und Sie haben nur einen Zeiger, weil Sie Arrays nicht nach Wert übergeben können. Arrays, die an eine Funktion übergeben werden, werden automatisch zu einem Zeiger zerfallen und der Argumenttyp char* foo[]
entspricht char** foo
. size_of
hilft nicht, da es nur die Größe des Zeigers selbst angibt.
Übergeben Sie die Länge als Argument an f1
. Oder noch besser, verwenden Sie std::vector
oder std::array
.
Ich kann den gegebenen Funktionsprototyp nicht ändern
Nun, das ist bedauerlich. Dann müssen Sie auf einige Tricks zurückgreifen. Die einfachste Lösung besteht darin, die Länge in einer globalen Variablen anstelle eines Funktionsparameters zu speichern.
Eine andere Möglichkeit ist ein abschließender Wert. Zum Beispiel, beende das Array immer mit nullptr und erlaube niemals anderen Elementen, diesen Wert zu haben. Genauso wie C-Strings mit Nullzeichen enden. Dann können Sie aufhören, das Array zu durchlaufen, wenn Sie auf nullptr stoßen. Aber ich nehme an, dass Sie das Array auch nicht ändern können.