2016-04-05 11 views
0

ファイルを1行ずつ読み込んで表示する簡単なアプリケーションを作成しました。 LinuxまたはWindowsマシンからFTPを使用してコピーされたファイルについては正常に動作しています。しかし、Mac OS Xからコピーされたファイルの場合、行の最初の文字は行を印刷しても表示されません。MacからコピーされたファイルのCR/LFの問題

Mac OS Xからコピーしたファイルもどのように処理するのですか?

サンプルファイル:ラインによって

Hello world 1 
Hello world 2 

表示した後に読んライン:

ello world 1 
ello world 2 

コード:一般的に

/*****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

をあなたは見てきました16進エディタのサンプルファイルですか? – paddy

+2

OS Xからコピーされたファイルは、他の方法でファイルを書き込むために特別な長さになるまで(またはMac OS 9以前を意味する場合を除いて)、Linuxからコピーされたファイルと同等です。 Mac OS 9が最後にリリースされてから約15年経っている)。行中の実際のバイトを徹底的に調べる必要があります。たとえば、 'for(int i = 0; i

答えて

2

、あなたが改行\nを探したいですおよびキャリッジリターン\r。システムによっては、これらのいずれか、または両方を同時に取得することができます。だからあなたは幾分あなたの機能を調整したいかもしれません。

lenは、バッファ内の1行の長さが含まれており、あなただけの改行文字(複数可)を末尾トリミングしたい場合、あなたは、単にこのような何か行うことができます:

while(len > 0 && (str[len-1] == '\n' || str[len-1] == '\r')) --len; 
str[len] = '\0'; 
関連する問題