Ich arbeite an einem Projekt, das ICU-Bibliotheken verwendet, um Datumsinformationen in verschiedenen Sprachen zu verarbeiten. Ich verwende den folgenden Code in einer Funktion:ICU DateFormatSymbols :: getMonths()
UErrorCode uec;
Locale locale(language); // e.g with language = "en"
DateFormatSymbols symbs(locale, uec);
int32_t count;
auto months = symbs.getMonths(count);
for(int32_t i = 0 ; i < count; ++i){
// some code handling month names, no ICU;
}
// more code that does not use ICU
Der Wert von count
sollte, erhalten durch das Verfahren getMonths()
als die Anzahl von Monaten eingestellt werden, z.B. 12 wenn die Sprache Englisch ist.
Das Problem ist, wenn ich die gleiche Funktion mehrmals aufrufen, manchmal count
ist 12 und manchmal ist es 0, scheinbar unvorhersehbar. Was schlimmer ist, derselbe Code verhält sich auf den PCs meiner Kollegen anders und ändert das Verhalten, wenn ich Codezeilen hinzufüge, die nichts mit symbs
zu tun haben, wie zum Beispiel das Erstellen eines UnicodeString
irgendwo innerhalb der Funktion.
Ich vermute, dass etwas mit der Initialisierung von DateFormatSymbols
oder dem Gebietsschema aus ist, aber für das Leben von mir kann ich nicht herausfinden, was. Kann mir bitte jemand sagen, warum das passiert und wie ich es beheben kann, damit ich immer die erwartete Anzahl von Monaten in count
bekomme?