ラベル c の投稿を表示しています。 すべての投稿を表示
ラベル c の投稿を表示しています。 すべての投稿を表示

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とか使うべきだと思います,はい.

2008/10/03

[C] errno の使い方

errno の使い方.



とインクルードして





と宣言すれば,errnoにエラー番号が入る.

番号とエラーの対応は,ヘッダファイルをみるか,
Unix系errno一覧 (PC覚え書き)
が便利.