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
  Int ändert bei Übergabe seinen Wert?? da_user 30 912 15.04.2018 22:12
Letzter Beitrag: da_user
  Millis verzögern Funktion? malsehen 14 550 29.03.2018 21:47
Letzter Beitrag: hotsystems
  Sound File BluPxl 9 375 23.03.2018 15:21
Letzter Beitrag: Tommy56
Star BME680 IAQ Wert auslesen Bitklopfer 9 1.072 18.03.2018 02:33
Letzter Beitrag: Wampo
  Serieller string zwischenspeichern und wieder ausgeben. Matt 15 778 03.03.2018 20:23
Letzter Beitrag: Tommy56
  RH_RF95.h: No such file or directory n88 2 297 15.02.2018 08:49
Letzter Beitrag: Fips
  byte´s zu einem String zusammenfassen ? Franz54 18 1.069 31.01.2018 10:10
Letzter Beitrag: MicroBahner
  Eine Funktion verlassen Jan5663 8 747 18.12.2017 13:49
Letzter Beitrag: Chopp
  Arrays of String in C Diskusguppy 3 365 16.12.2017 10:12
Letzter Beitrag: Diskusguppy
  Matlab und Arduino verbinden und Anal. Wert lesen Nextero 13 762 12.12.2017 20:07
Letzter Beitrag: GuaAck

Gehe zu:


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