Forum: Compiler & IDEs GetLine Funktion


von Klaus (Gast)


Lesenswert?

Hallo,

ich habe eine Funktion geschrieben um eine Zeile einer Datei auszulesen.
Manchmal kommt es zu Abstürzen, und ich finde den Fehler nicht.
Kann mal jemand über diese Funktion schauen ob das so passt?
1
S8 GetLine(int fd, char *buf, U8 n)
2
{
3
  U8 charsRead=0;
4
  U8 readChar;
5
  
6
  if(n==0) return (-1);
7
  if (fd < 0) return (-1);
8
9
  nav_select( fd );
10
11
  if ( file_eof() )  return (-1);
12
13
  while(charsRead<n-1)
14
  {
15
    readChar=file_getc();
16
    if(readChar == FS_EOF) return (-1);//break;
17
    if((readChar == '\n')||(readChar == '\r')) {if(charsRead>0) break;}
18
    else
19
    {
20
      *buf++ = readChar;
21
      charsRead++;
22
    }
23
24
  }
25
26
  *buf = '\0';
27
28
  return charsRead;
29
}

n = maximal 100

von Peter II (Gast)


Lesenswert?

wieviel platz ist ein buf?

von gaast (Gast)


Lesenswert?

>n = maximal 100
Bau da mal einen Test ein oder nimm asser.h zum Testen.

von gaast (Gast)


Lesenswert?

asserT.h

von Karl H. (kbuchegg)


Lesenswert?

Jetzt 3 mal in Gedanken durchgegangen. IMHO ist diese Funktion ok. 
Fehler beim aufrufenden Code?

von DirkB (Gast)


Lesenswert?

Wie ist denn FS_EOF definiert?

von Rolf M. (rmagnus)


Lesenswert?

DirkB schrieb:
> Wie ist denn FS_EOF definiert?

Der Typ von readChar läßt vermuten, daß es sich um einen 8-Bit-Typ 
handelt. Wie wird denn sichergestellt, daß FS_EOF keinem gültigen Wert 
entspricht?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.