Hallo, Ich möchte mit: int length = strchr(rx_buffer, '#'); Nach dem # - Zeichen im String suchen. leider sagt der Compiler: Fehler: call of overloaded 'strchr(unsigned char [32], char)' is ambiguous Was mache ich falsch?
Für den Compiler ist der Aufruf der Funktion nicht eindeutig. Der Compiler hat mehrere Funktionen, die auf deinen Aufruf passen. Überprüfe mal deine Aufrufparameter. Ein bisschen mehr Source-Code wäre auch nicht verkehrt. Grüsse
> Überprüfe mal deine Aufrufparameter.
Was genau soll ich bei denen überprüfen?
Die Datentypen der der Parameter sollten mit den Datentypen übereinstimmen, die die Funktion erwartet.
1 | char *strchr( const char *str, int ch ); |
Na! Kommst Du drauf? Grüsse
hmm... rx_buffer ist ein unsigned char, erwartet wird ein const char und '#' ist doch ein int, oder? Weiterhin gibt doch strchr entweder die Stelle zurück, an der die # steht, oder eine Null, falls keine # enthalten, richtig? Das kann in dem int length gespeichert werden.
Und genau der Rückgabewert passt nicht auf deinen int length! Der Rückgabewert ist ein Zeiger (char*). Je nach System ist dieser 16/32/64 Bit. Der Compiler weigert sich eine Adresse in einen Integer zu casten. Was auch irgendwie keinen Sinn ergibt. Der Rückgabewert gibt auch nicht irgendeine Länge zurück sondern die Speicheradresse des gefundenen Zeichens. Um die Länge zu erhalten müsstest Du rx_buffer von diesem Zeiger subtrahieren. Grüsse
Name schrieb: > Fehler: call of overloaded 'strchr(unsigned char [32], char)' is > ambiguous Also scheint es sich um C++ zu handeln. Da gibt es zwei Überladungen der Funktion. Wo ist denn der Rest der Fehlermeldungen? Ich kenne das so, daß der Compiler danach noch die Kandidaten nennt, die er in Betracht ziehen würde. Name schrieb: > hmm... > > rx_buffer ist ein unsigned char, Warum unsigned? Das ist der Auslöser der Fehlermeldung, weil der Compiler sich aufgrund des falschen Zeigertypen nicht entscheiden kann, welches strchr er aufrufen soll. > erwartet wird ein const char und '#' ist doch ein int, oder? Nicht in C++. Da ist '#' ein char. > Weiterhin gibt doch strchr entweder die Stelle zurück, an der die # > steht, oder eine Null, falls keine # enthalten, richtig? > Das kann in dem int length gespeichert werden. Du willst den zurückgegebenen Zeiger in einem int speichern?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.