GetLocaleInfoW wchar_t
-
widecharman schrieb:
Mit
sizeof(*country) / 2
müsste es dann doch aber gehen, oder vestehe ich das falsch?
Was würde in diesem Beispiel
int* bla
sizeof(bla) deiner Meinung nach für einen Wert zurückliefern?
-
4 bytes oder nicht? Ich verstehe immer noch nicht, wie ich auf den Wert komme, auf den country zeigt. Vielleicht wohl eher ein Verstädnis Problem von mir.
Angenommen ich habe sowas...
int i = 0;
int *x;
x = &i;
Jetzt komme ich doch auch mit *x auf den Wert?
-
widecharman schrieb:
4 bytes oder nicht? Ich verstehe immer noch nicht, wie ich auf den Wert komme, auf den country zeigt.
Was willst du mit dem Wert? Du brauchst doch die Länge des Arrays und die bekommst du bei dynamischem Speicher nicht mit
sizeof
.Du könntest das zum Beispiel einfach so machen:
std::vector<wchar_t> country(260); if (GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGLISHCOUNTRYNAME, country.data(), country.size()) == 0) { throw std::runtime_error("Beschreibung"); }
-
Richtig, die Größe eines Pointers (auf einem 32Bit System in der Regel 4), eben weil bla ein Pointer ist. Gut, OK, schauen wir uns ein weiteres Beispiel an:
wchar_t* bla = new wchar_t[260];
Wo liegt hier der Unterschied zum letzten Beispiel und wieso sollte sizeof(bla) sich hier anders Verhalten?
-
Sollte immer noch 4 sein, ist ja immer noch ein Pointer der ledegilich auf etwas anderes zeigt, oder nicht?
Du brauchst doch die Länge des Arrays und die bekommst du bei dynamischem Speicher nicht mit sizeof.
Wieso funktioniert sizeof nicht bei dynamischem Speicher? Das wusste ich nicht.
-
widecharman schrieb:
Sollte immer noch 4 sein, ist ja immer noch ein Pointer der ledegilich auf etwas anderes zeigt, oder nicht?
Richtig, ist immer noch ein Pointer, also liefert sizeof() ebenfalls die Größe eines Pointers.
Und worauf zeigt dieser Pointer?
-
Auf den allokierten Speicherbereich?
-
Auf das erste Element des allokierten Arrays. Dabei handelt es sich um einen wchar_t und sizeof(*country) liefert folgedessen die Größe eines wchar_t zurück...
Aber um zum Abschluss zu kommen: sizeof wird beim Kompilieren ausgewertet und kann daher schon rein prinzipiell nicht die Größe eines Objektes, das erst zur Laufzeit erzeugt wird, kennen, selbst wenn das Typsystem einen Weg hätte, danach zu fragen. Es gibt keinen Weg um in Standard C++ die Größe eines mit new[] angelegten Arrays abzufragen. Aber das macht auch nix, denn da du es ja selbst angelegt hast, musstest du sowieso schonmal wissen wie groß es ist...
-
Ahhhhh! Ich habs verstanden!
Jetzt weiß ich warum es so nicht hätte funktionieren können, danke dot für die Nachhilfe!
-
widecharman schrieb:
Ahhhhh! Ich habs verstanden!
Wunderbar, dann war meine Mission erfolgreich...