2016-04-05 7 views
0

Ich habe eine einfache Anwendung geschrieben, die die Datei Zeile für Zeile lesen und anzeigen wird. Für die Datei, die von Linux- oder Windows-Maschinen mit FTP kopiert wird, funktioniert es gut. Bei Dateien, die von Mac OS X kopiert wurden, wird das erste Zeichen der Zeile nicht angezeigt, wenn ich die Zeile drucke.CR/LF Problem für die Datei vom Mac kopiert

Wie wird mit der von Mac OS X kopierten Datei verfahren?

Beispieldatei:

Hello world 1 
Hello world 2 

Anzeige nach dem Lesen Zeile für Zeile:

ello world 1 
ello world 2 

Code:

/*****Function to add the NULL termination at end of line*********/ 

my_func(char *str, int len) 
{ 
    if(len) 
    { 
     if(str[len-1] != '\r') 
     { 
      str[len] = '\0'; 
     } 
     else 
     { 
      str[len-1] = '\0' 
     } 
    } 
    else 
    { 
     str[len]='\0'; 
    } 
} 
+3

Haben Sie das gesuchte Beispieldatei in einem Hex-Editor? – paddy

+2

Die von OS X kopierte Datei entspricht der von Linux kopierten Datei, es sei denn, Sie verwenden die Datei auf eine andere Art und Weise (außer Sie meinen Mac OS 9 oder früher - aber diese Maschinen sollten jetzt tot sein; es ist ungefähr 15 Jahre her, seit Mac OS 9 das letzte Mal veröffentlicht wurde). Sie müssen sich die tatsächlichen Bytes in der Zeile genau ansehen. Zum Beispiel, für (int i = 0; i

Antwort

2

In der Regel wollen Sie für Zeilenvorschub suchen \nund Wagenrücklauf \r. Je nach System können Sie eines oder beide zusammen erhalten. Vielleicht möchten Sie Ihre Funktion etwas anpassen.

Wenn len enthält die Länge einer einzelnen Zeile in dem Puffer, und Sie wollen nur Zeilenende-Marke (n) trimmen Hinter Sie einfach so etwas tun könnte:

while(len > 0 && (str[len-1] == '\n' || str[len-1] == '\r')) --len; 
str[len] = '\0'; 
Verwandte Themen