2016-07-17 16 views
1

Ich versuche, zwei Zahlen durch ein Leerzeichen getrennt von einer Zeichenfolge zu extrahieren und sie als zwei Ints zu speichern. Zum Beispiel:sscanf Fehler: kann 'String' nicht zu 'const char *' konvertieren

if input_string = "1 95" then: 
servo_choice = 1 
input_number = 95 

Code:

String input_string = ""; 
int input_number = 0; 
int servo_choice = 0; 

input_string = Serial.readString(); 
sscanf(input_string, "%d %d", &servo_choice, &input_number); 

Die IDE gibt mir diese Fehlermeldung:

exit status 1 
cannot convert 'String' to 'const char*' for argument '1' to 'int scanf(const char*, ...)' 

Edit: Ich denke,

input_number = input_string.substring(1,5).toInt(); 

tatsächlich funktioniert und das tut, was ich wollen. Ich würde immer noch gerne wissen, wie man scanf wenn möglich zum Arbeiten bringt.

Vielen Dank für alle Antworten im Voraus ..

+0

Sie sind in C++ kompilieren, wobei in diesem Fall der Tag auch falsch ist. Bitte aktualisiere das Tag und die Frage. – 2501

Antwort

2

Sie könnten versuchen, Ihre String in eine char Array mit toCharArray und übergeben das zu sscanf konvertieren. So etwas Ähnliches (nicht jedoch getestet)

int buffer_len = input_string.length() + 1; 
char buffer[buffer_len]; 
input_string.toCharArray(buffer, buffer_len); 
sscanf(buffer, "%d %d", &servo_choice, &input_number); 
1

Die String ist eine Klasse, kein Grundtyp. Das bedeutet, dass Sie eine Methode zum Konvertieren/Zurückgeben eines Zeigers in ein Zeichen benötigen, wenn Sie es in einem sscanf verwenden möchten. Diese Methode existiert und heißt c_str().

Also, Ihre Linie muss sein:

sscanf(input_string.c_str(), "%d %d", &servo_choice, &input_number); 
Verwandte Themen