Ich versuche, ein LPCSTR mit atoi () in eine ganze Zahl zu konvertieren, und um zu überprüfen, dass die Konvertierung erfolgreich ausgeführt wurde, möchte ich die Anzahl der Stellen in der produzierten Ganzzahl und der ursprünglichen LPCSTR zählen (sie sollte nichts außer Ganzzahlen)
Ich habe Schwierigkeiten, einen guten Weg zu finden, um die Länge des LPCSTR zu berechnen. Bis jetzt scheint der einzige Weg zu sein, nur zu zählen, bis ich zu einem '/ 0' komme
Irgendwelche Vorschläge für eine bessere Methode?
Danke
Sie könnten strtol
verwenden und das zurückgegebene endptr
verwenden, um zu prüfen, ob es sich um das Ende der Zeichenfolge (0 Byte).
Das Zählen ist nicht unbedingt genau. "00" ergibt 0, aber 0 hat eine Ziffer und die ursprüngliche Zeichenfolge hat die Länge 2.
Die Funktion strlen () ist, was Sie suchen für.
Beispielverwendung:
%Vor%Sprechen Sie darüber, mehr Wärme als Licht zu erzeugen ... :) Hören Sie auf, atoi zu benutzen, und das wird die meisten Ihrer Probleme lösen. Atoi ist eine tote Funktion ohne praktischen Wert. Der richtige Weg, eine String-Darstellung in eine Zahl zu konvertieren, sind Funktionen aus der 'strto ...' Gruppe ('strtol', 'strtoul' usw.). Diese Funktionen geben Ihnen genügend Informationen zurück, um sofort festzustellen, ob ein Konvertierungsfehler aufgetreten ist oder nicht.
Ich würde die Dinge ein bisschen anders machen - initialisiere einen Stringstream mit der Eingabe, lese ein int und überprüfe, ob der Stream leer ist:
%Vor%Eine andere vernünftige Möglichkeit wäre strtol oder einer seiner Cousins. Diese geben einen Zeiger auf das erste nicht konvertierte Zeichen (falls vorhanden) zurück, so dass sie ziemlich direkt sagen, was konvertiert wurde und was nicht. Sie sind schneller, aber in der Regel weniger flexibel als Streams. Wenn Sie beispielsweise eine Fließkommazahl lesen möchten, funktioniert check_read so, wie sie ist, aber etwas, das strtol verwendet, müßte neu geschrieben werden.
Noch eine weitere Möglichkeit: Boost lexical_cast (das etwas anders verpackt ist, aber dem obigen Code ziemlich ähnlich ist).
Da LPCSTR
nur const char*
ist (nach dem Entfernen von Makros), wird strlen
in Ordnung sein.
Wenn Sie jedoch möchten, dass eine Windows-Funktion explizit mit LPCSTR
input übereinstimmt, können Sie lstrlenA
verwenden. Ich bezweifle ernsthaft, dass es einen praktischen Unterschied gibt, der dies nennt und strlen
aufruft.