重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

cgiでHTMLを作成していますが、cgiを実行した時に
HTMLで改行が2個入ってしまいます。
unix上のファイルをfgetsにて1行ずつ読み込んで
そのまま出力しています。

改行コードを削除したいのですが、
表示しているHTMLのsrc内にある改行コードに何(どの改行コード)が入っているのか分からず、削除できません。
(fgetsで読み込んだ1行の最後に"\0"が入っていると思って、それを削除してみたのですが、駄目でした。このやりかたは間違えていますか?正しい方法を教えてください。)
宜しくお願いいたします。

A 回答 (1件)

文面からすると、CGIの開発言語はC言語でしょうか?


その前提で話をすすめます。

出力はどうやってますか? もしかして、puts を使っていませんか?
・fgets は、改行文字までを1行として、改行文字込みで読み込みます。
・puts は、引数で指定した文字列を出力したあと、改行文字を出力します。
そのため、fgetsで読んでputsで出力すると改行文字がダブります。

もしそうであれば、puts ではなく fputs でstdoutに出力すればOKです。(fputs は引数文字列のみ出力し、改行文字の追加出力は行いません。)


なお、「'\0'を削除」というのは明らかに間違ってます。
(そもそも「削除」というのが具体的にどういう操作をしているのか、かなり意味不明ですが)
'\0'は、C言語において「文字列」の終わりを示します。
fgets は、1行読み込んだあと、読み込んだ文字列が全部で何文字あるのかを示すために、最後の文字(普通は改行文字)の次に'\0'を入れます。そして、puts やfputsなど、入力として指定した引数の示すデータのうち、'\0'の前までを「文字列」として認識します。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。m(_ _)m
開発言語はc++で、fgetで読んで、coutで出力していました。多分、これで、fgetで読み込んでputsで出力したときと同じように、
改行文字がダブっていたのだと思います。
“od -c ファイル | less”
でファイル中の改行コードを見ることが出来ることが分かったのでそれで確認しました。

最初、ダブっている'\n'を削除して実行したところ、上手く動かないと思いこんで、いろいろ悩んだあげく、
'\0'の削除してみるという考えに至ったのですが、おっしゃられているとおり、全く“意味不明”の行為でした・・・。
だいたい、\n(改行)と\0(null)は全く別ものですものねf^_^;
 また、実は上手くいかないと思っていたのは間違いで、修正している箇所を単純に間違えていただけでした。
(似たような処理をしている箇所が2カ所あって、結果が表示されるのとは別の方の修正をしていましたf^_^;)
 質問を出した数分後、休憩を取っている時にその事に気付き、修正しなおしたら、即効解決でした。

しかし、意味不明な修正をしたということは、やっぱりしっかり理解していなかった証拠・・・。
mtaka2さんの回答、'fgets','fput','\n','\0'の再勉強になりました。ありがとうございました。m(_ _)mm(_ _)m

お礼日時:2008/06/07 06:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!