INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
File-Lese-Funktion mir Rückgabe wert ANSI C string: wie?
28.02.2015, 15:36 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2015 15:53 von HaWe.)
Beitrag #17
RE: File-Lese-Funktion mir Rückgabe wert ANSI C string: wie?
meine fgets-Funktion läuft jetzt (soweit beobachtet auch fehlerfrei),
Code:
char * fgets ( char * str, int32_t num, File * stream ) {
  int32_t i;
  i=0;
  strcpy(str, "");
  while ( stream->available() && (i<(num-1) )   ) {  
     str[i]=stream->read() ;
     if(str[i] >=  ' ')  ++i;
     else
     if(str[i] == '\0') goto ok; // end of string: \0
     else
     if(str[i] == '\n')   {      // end of string: CR
         //str[i] = '\0';        // optional: CR mit Null-Terminierung überschreiben
         str[++i] = '\0';        // zusätzliche Nullterminierung nach CR einfügen (== ANSI C)
         goto ok;
     }      
  }
  ok: return(str);
}

allerdings bekam ich von einem C-Fachmann noch eine Verbesserung gezeigt, die wohl wirklich wie das Original arbeitet:
Code:
//Try this instead (not tested, you should test it).

char * fgets ( char * str, int32_t num, File * stream ) {
  int32_t i = 0;
  
  while (i < (num - 1)) { // got room for newline and terminating null?
    int16_t ch = stream->read();
    if (ch < 0) // end of file
      break;
    str[i++] = ch;
    if ('\n' == ch) // end of line
      break;
  }
  
  if (i) { // room in buffer for terminating null
    str[i] = 0;
    return str;
  }
  else
    return NULL; // buffer too small or immediate end of file
}

// Peter Olson

share and enjoy! 8-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  String nach Byte Array in ASCII-Codierung nexus1212 7 354 05.11.2017 14:36
Letzter Beitrag: Tommy56
  String vergleichen georg01 15 978 18.07.2017 20:35
Letzter Beitrag: Tommy56
  String.charAt() ardun 3 398 02.07.2017 15:28
Letzter Beitrag: Tommy56
  Aus char string machen metzgefa 1 455 06.05.2017 15:15
Letzter Beitrag: Tommy56
  switch case funktion ausser halb loop ??? huber5093 13 1.686 12.04.2017 15:26
Letzter Beitrag: Tommy56
  String übergeben oOSpikeOo 9 838 28.03.2017 19:47
Letzter Beitrag: georg01
  String in tinygps++ einlesen hoko 17 1.291 07.03.2017 15:40
Letzter Beitrag: hoko
Rainbow File geht nicht zum compilieren!!!! Jocky 7 622 19.02.2017 20:01
Letzter Beitrag: Binatone
  String -> Char *gelöst* Binatone 2 591 31.01.2017 11:08
Letzter Beitrag: Binatone
  ascii string to int array konvertieren renid55 3 681 29.12.2016 11:49
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste