So finden Sie die Länge eines LPCSTR

8

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

    
Zain Rizvi 13.10.2009, 18:15
quelle

9 Antworten

11

Ist das nicht was strlen?

    
sean riley 13.10.2009, 18:17
quelle
14

Um die Länge (in diesem Fall die Anzahl der Stellen) eines LPCTSTR zu ermitteln, sollten Sie lstrlen() und nicht strlen() verwenden. Quelle: MSDN

    
MrD 14.03.2013 00:36
quelle
8

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.

    
Rüdiger Hanke 13.10.2009 18:19
quelle
5

Die Funktion strlen () ist, was Sie suchen für.

Beispielverwendung:

%Vor%     
Matt Dillard 13.10.2009 18:19
quelle
2

Nein.

So finden Sie die Länge einer C-Saite. Du könntest strlen benutzen, aber es muss immer noch die ganze Zeichenfolge runtergehen und die Anzahl der Zeichen vor einem '%code%' zählen.

    
Eclipse 13.10.2009 18:17
quelle
2

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.

    
AnT 13.10.2009 18:39
quelle
1
%Vor%     
user189405 13.10.2009 20:34
quelle
0

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).

    
Jerry Coffin 13.10.2009 18:47
quelle
0

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.

    
Patrick 09.01.2017 03:44
quelle

Tags und Links