2009/06/29

[C]文字列操作でのメモ −\0 は大事です

今日は,後輩にCでのコーディングについて質問されてちょっとはまったので,メモ.



と並んでいるデータの最後に,';'をつけたいとのこと.
なんでそういう処理にCを使うんだよ,とかいう突っ込みを飲み込みつつ (笑)
fgets()で一行ずつバッファに読み込んで,一行ずつファイルに書き込むことはできたらしい.

(1) strcat()を使えば? と言うと,改行の後に';' が連結されてしまうらしい.

しょうがないので,
(2)for でバッファをひとつずつ知れべていって,'\n' だったら';'に置き換えて,
次の配列に'\n' を代入すると?
出力されたデータにごみが混ざる,と.

そこで,
(3) 代入じゃなくてstrcat()を使って '\n 'を付加すると? うまくいったらしい.

(2) と (3) で何が違うのか悩んだけど,要するに(2)だと'\0'を上書きしてしまっているので,
バッファの出力をするときに文字列の終わりまでじゃなくて,バッファ全体を出力してしまったということらしい.
strcat()は,そこらへんを良き様に計らってくれてた,と.

いや,Cで文字列操作なんてあんまりやらないから,\0のことは大して気にかけてなかったわけです...
(件の後輩は,\0のことは知らなかったんだけど..これだから最近の若 ry..)
for でひとつずつバッファの中身を調べるって,あんまりスマートじゃない気がするのだけど,
ほかに何かいい方法はあります?

というか,こういうデータの処理はCよりもrubyとかperlとか使うべきだと思います,はい.

1 件のコメント:

  1. hiro-tak022009/06/30 4:44

    てか,これくらいならvimでも十分にできるな...
    :%s/$/;/

    返信削除