strchr Funktion überladen?

Gast #3148140
Lesenswert?

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.
#3148145
Lesenswert?

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
#3148167
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren