C library function - strtol()

OP #6319056
Ich habe das Problem, dass ich einen PWM Wert aus einen char Puffer in 
int
wandeln muss. Soweit kein Problem.

Der Puffer ist der rx_buffer eines UDP Servers.

Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück.
Damit steht mein PWM Device logischerweise.

1
while(1) {
2

3
   throttle = strtol(rx_buffer, NULL, 10);
4

5
      if (throttle == 0) { 
6
         STOP
7
      }
8
}

Die 0 soll natürlich verarbeitet werden, wenn sie denn über den 
rx_buffer
empfangen wird.
Gast #6319076
W3ll S. schrieb:

> Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück.
> Damit steht mein PWM Device logischerweise.

Dann frag halt vorher ab, ob er leer ist, indem Du z.B. auf 
(*rx_buffer=='0') prüfst. Oder mit (strlen(rx_buffer)==0).
Gast #6319077
Manpage:

> If  endptr  is  not  NULL,  strtol() stores the address of the first invalid
> character in *endptr.  If there were no digits at all, strtol() stores the
> original value of nptr in *endptr (and returns 0).  In particular, if *nptr is
> not '\0' but **endptr is '\0' on return, the entire string is valid.

Also ja, ungefähr so.
Gast #6319121
W3ll S. schrieb:
> Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück

Warum wendet man strtol und das nachfolgende setzen von throttle 
überhaupt auf einen leeren rx_buffer[0]=='\0' buffer an ?
Programmierfehler ? Faulheit ? Die fälschliche Erwartung dass jemand für 
einen schon die Arbeit macht ?
#6319196
Typisch hat man ein Protokoll implementiert und dieses sagt einem, wann 
ein gültiges Paket vorliegt. Und erst dann wird dieses Paket vom Parser 
ausgewertet.
Daß man auf einem ungültigen Puffer parst, kann also nie vorkommen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.