今日は,後輩に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とか使うべきだと思います,はい.
てか,これくらいならvimでも十分にできるな...
返信削除:%s/$/;/