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

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