表題の通り、文字列リテラルに含まれているcrlfをlfに変換したいのですが、改行が余計に入ってしまう状態です。
C
1void replace_crlf_to_lf(char *buf, size_t size) 2{ 3 for (int n = 0; n < size - 1; n++){ 4 if (*(buf + n) == '\r'){ 5 *(buf + n) = '\n'; 6 n += 1; 7 } 8 } 9}
上記のような関数を作ってみたのですが、これを通してみると改行が余計に一列増えてしまう状態です。例えば下記のような形になります。
〇変換前 ABCDEFG ABCDEFG
〇変換後 ABCDEFG ABCDEFG
形式としては変換前のように改行を一行挟まずにしたまま各行末尾の改行コードを変換したいのですが、どのようにすればよいのでしょうか。
初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。
よろしくお願いいたします。
細かいですが、
> if (*(buf + n) == '\r'){
> *(buf + n) = '\n';
このコードですと、CRLF("\r\n")ではなくて、単にCRだけでもLFに変換してしまいますが良いのでしょうか。
あまり深く改行コードについて理解しておらず、上記のようにしてみておりました。CRだけの場合もあるということですね。ありがとうございます。
> CRだけの場合もあるということですね。
昔のmacではCRのみが改行でした。まぁ、現代においてはほぼ無いですが、通信データなどに名残りもあるので、100%無い、というわけでもないです。nkfと言うコマンドの改行コード指定オプションにもLFのみ、CRのみ、CRLFなどと言うものがあります。
なるほど。。。
Windowsのメモ帳で作成したテキストファイルをLinux上で開くと改行コードが合わないようだったので、上記のような関数を作成しようかと思った次第でした。環境によっては改行コード自体がそもそも異なる可能性もあるのですね。。
回答1件
あなたの回答
tips
プレビュー