Bearbeiten: Nach der Implementierung von James Hopkins Vorschlag bekomme ich immer noch die Warnung "ungültiger Name 'null'", was viel besser ist als diese merkwürdigen Zeichen. Dann ging ich zurück und las das Bibliotheksdokument erneut, und es stellte sich heraus, dass für diese spezielle Funktion das Argument ein weiteres Element einer Nicht-NULL-Zeichenkette als die Größe von aNames haben sollte. Diese zusätzliche Zeichenfolge hat einen anderen Zweck. Nach dem Hinzufügen einer weiteren Zeichenfolge wird der Code ordnungsgemäß ausgeführt. Es ist alles meine Schuld und es tut mir so leid.
Ursprünglicher Beitrag:
Hallo,
Dies ist mein erster Beitrag, also sei bitte nett. Ich habe in diesem Forum gesucht und gegoogelt, kann aber immer noch keine Antwort finden. Dieses Problem hat mich für mehr als einen Tag gestört, also bitte geben Sie mir Hilfe. Danke.
Ich muss einen String-Vektor an eine Bibliotheksfunktion foo übergeben (char const * const * const). Ich kann das & amp; Vec [0] nicht übergeben, da es ein Zeiger auf eine Zeichenfolge ist. Deshalb habe ich ein Array und übergebe das c_str () an dieses Array. Das Folgende ist mein Code (aNames ist der Vektor der Zeichenkette):
%Vor%Es scheint jedoch, dass es zu undefiniertem Verhalten führt:
Wenn ich den obigen Code ausführe, dann wirft die Funktion foo einige Warnungen über unzulässige Zeichen ('èI' blablabla) in aR.
Wenn ich aR vor Funktion foo wie folgt ausdrucken:
%Vor%Dann ist alles in Ordnung. Meine Fragen sind:
Führt die Konvertierung zu undefiniertem Verhalten? Wenn ja, warum?
Was ist der richtige Weg, um den Vektor der Zeichenkette an foo (char const * const * const) zu übergeben?
Da foo
nur einen Zeiger verwendet, ist meine wilde Vermutung, dass es ein NULL-terminiertes Array benötigt. Ordnen Sie ein zusätzliches Element für aR
zu und weisen Sie ihm NULL zu.
Mein Vorschlag wäre:
%Vor%Nun, es scheint mir richtig zu sein. c_str erzeugt ein Null-terminiertes Array von char, das bis zur nächsten nicht-konstanten String-Operation konstant ist. Sie speichern die c_str-Zeiger in einem const char * -Array.
Ich bin kein Boost-Spezialist, also könnte das Problem da sein, aber ich schätze, dass Ihre Strings im Vektor in einer Codierung sind, die mit der in Funktion foo erwarteten unvereinbar ist.
Überprüfen Sie Ihren Code vom Standpunkt der Codierung.
my2c