Wie kann ich berechnen Sie die Anzahl von Elementen im char-array?
Ich versuche zu berechnen, die Anzahl der Elemente in einem array, und mir wurde gesagt, dass die Linie
int r = sizeof(array) / sizeof(array[0])
mir geben würde, die Anzahl der Elemente im array. Und ich fand die Methode funktioniert, zumindest für int-arrays. Wenn ich versuche diesen code, jedoch Dinge zu brechen.
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
char binaryPath[MAX_PATH];
GetModuleFileName(NULL, binaryPath, MAX_PATH);
cout << "binaryPath: " << binaryPath << endl;
cout << "sizeof(binaryPath): " << sizeof(binaryPath) << endl;
cout << "sizeof(binaryPath[0]: " << sizeof(binaryPath[0]) << endl;
return 0;
}
Wenn dieses Programm läuft binaryPath Wert ist
C:\Users\Anish\workspace\CppSync\Debug\CppSync.exe
das zu haben scheint, eine zurückgegebene Größe von sizeof in bytes? bits? idk, könnte mir jemand erklären, dieses auch?) 260. Die Linie
sizeof(binaryPath[0]);
gibt einen Wert von 1.
Natürlich anschließend dividieren 260 von einem Ergebnis von 260, die ist nicht die Anzahl der array-Elemente (nach meiner Zählung sind es 42 oder so). Könnte mir jemand erklären, was ich falsch mache?
Ich habe den leisen Verdacht, dass ist nicht wirklich ein array, wie ich darüber denke (ich komme von Java und python), aber ich bin mir nicht sicher also Frage ich Euch.
Dank!
- Wie ich schon sagte als Antwort auf dieses: stackoverflow.com/questions/16049936/..., Aber mir wurde gesagt, es war nicht die richtige Antwort, weil es nichts hatte zu tun mit, warum Ihr code war ein Absturz. Vielleicht möchten Sie gehen zurück auf diese Frage und erklären (falls jemand anderes läuft in eine ähnliche proble), was das Update war...
- Auf einem ganz anderen Hinweis, schrieben Sie
using namespace std;
es, oder war es von irgendeinem tool? Gerade auf der Suche nach Informationen keine Urteile beteiligt sind. - Die Anzahl der Elemente der
char
arrayMAX_PATH
. Es ist einfach so.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sich für die Größe der Zeichenfolge, dann müssen Sie verwenden
strlen
, wenn Siesizeof
es wird Ihnen sagen, der gewährte Betrag nicht die Größe des null-terminierten string:Müssen Sie
#include <cstring>
auf der Oberseite.260 ist
MAX_PATH
, die Sie bekommen, weilsizeof
gibt die Größe des gesamten Arrays - nicht nur die Größe der Zeichenfolge in das array.Um das Verhalten, das Sie suchen, verwenden Sie
strlen
statt:Verwechselst du die Größe des Arrays mit der Länge der Zeichenfolge enthält.
sizeof(arrayVar)
bietet Ihnen die gesamte Größe des Arrays unabhängig davon, wie lang der string wird. Sie benötigenstrlen()
bestimmen die tatsächliche Länge der Zeichenfolge enthält.Daran erinnern, dass char-arrays in C++ und C werden verwendet, um die Lagerung von rohen Zeichenketten, und dass solche Zeichenfolgen' - Ende gekennzeichnet ist durch ein null-Zeichen.
Den Betreiber
sizeof
ist nicht dynamisch: es wird Ihnen die Größe des gesamten Arrays, oder je nachdem, welcher Typ Sie bieten in bytes (oder char, da Sie die gleiche Größe), wie im code definiert werden. Daher 260 ist sicherlich der Wert vonMAX_PATH
, die verwendet wird, um zu definieren char arraybinaryPath
.Die Zeichenkette, die gespeichert im array nach dem Aufruf von
GetModuleFilename
wird null-terminiert, wie in den übereinkommen oben angegeben. Um seine Länge, die Sie benötigen zu zählen, die Zeichen in es, bis das null-Zeichen oder verwenden Sie diestrlen
Funktion der C-Bibliothek.Einige Hinweise: