Probleme mit der atoi-Funktion

Gast #1407974
Lesenswert?
• ▲
▼
Hallo Leute,

ich hab Probleme mit der atoi-Funktion. Ich lese aus einer Datei 
(config.dat) ein 9 stelligen Zahlenwert in den config_buffer ein. Diesen 
eingelesenen Zahlenwert möchte ich nun in einen int-Zahlenwert umwandeln 
und in zahlen_wert[i] schreiben. zahlen_wert[] ist global als unsigned 
in deklariert. Die ganze Geschichte funktioniert bis zu einer 5 
stelligen Zahl (z.B. 000012345), leider ab einer 6 stelligen Zahl 
(000123456) nicht mehr. Hat einer von euch eine Idee was ich falsch 
mache?

Ich dank euch.
Gruß
Stephan
1
  S32 config_offset = 0;
2
  unsigned char config_buffer[9];
3
  U8 mode_fseek = 0;
4

5
  config_offset = 188;
6
  Fopen("config.dat",'r');        //öffnen der config Datei
7
  for(i=0; i<15; i++)            //15 Schleifendurchläufe für 15 mögliche Identifier
8
  {
9
    config_offset = config_offset + 27;  //den Offset auf den ersten Identifier im Config-File setze
10
    Fseek(config_offset, mode_fseek);   //im Config-File von vorne um den Ofsett verschieben
11
    Fread(config_buffer, 9);       //auslesen von 9 Zeichen in den config_buffer
12

13

14
    zahlen_wert[i] = atoi(&config_buffer); 
15
  }
16
  Fclose();
Gast #1408032
Lesenswert?
• ▲
▼
Stephan schrieb:
> Danke für die schnelle Antwort. Leider funktioniert es als long
> zahlen_wert auch nicht. Gibts sonst noch Ideen?

man-page von atoi lesen. Falls keine man-page vorhanden, im C-Buch 
gucken. Falls kein C-Buch vorhanden, umgehend bestellen. Bis dahin atol 
nehmen. Oder gleich strtol.
Gast #1408083
Lesenswert?
• ▲
▼
Ein Satz aus der man-Page:

The conversion is done according to the given base, which must be 
between 2
and 36 inclusive, or be the special value 0.

Prinzipiell hast du recht, steht ja auch in dem Satz, aber man weis ja 
nie, was das für Daten sind. Und Strings sollten immer mit \0 terminiert 
sein, um sich nicht über irgendwelche Nebeneffekte wundern zu müssen... 
(zumindestens nach meiner Meinung)
#1408092
Lesenswert?
• ▲
▼
Irgendwie muss die Ziffernfolge beendet werden, dass ist klar. Aber wenn 
der Programmierer der Funktion(en) keinen grandiosen Mist gebaut hat, 
dann ist es egal ob das \0 oder ein Komma oder das Ende der Zeile ist.

Das ist ja grad der Witz an strtol. Man kann diese Funktion verwenden, 
um bestehende Zeichenfolgen mit enthaltenen Zahlen inkrementell zu 
parsen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.