バイナリとテキスト②
テキストがバイナリのサブセットな為、基本的にはバイナリと言っていれば間違いではないのですが、それでもテキストとバイナリは意識して使い分けています。(以下は私の解釈なので一般的ではないかもしれません)
テキストファイルとバイナリファイルというと、
テキストファイル、それ以外のデータが入っているものをバイナリファイル
と言っている気がしますが、C言語的には終端が0か否かで考えます。
char foo [ ] = {'A', 'B', 'C'};
は0終端でないのでバイナリ
この場合char型でバイナリデータを扱っているので望ましくない。
(このデータをテキストだと思って、文字列を扱う標準関数に引き渡すと0終端でないため予想しないバグが発生する。)
unsinged char bar [ ] = "ABC";
は0終端なのでテキスト
この場合はunsigned char型でテキストデータを扱っているので許容できるが、char型を使う方が寛容。
(標準関数に渡す時キャストする必要が出てくる。)
char foo [ ] = "abc";
は0終端なのでテキスト
この場合char型でテキストデータを扱っているので良い。
unsinged char bar [ ] = {'A', 'B', 'C'};
は0終端でないのでバイナリ
この場合はunsigned char型でバイナリデータを扱っているので良い。0終端でない事を意識するにもふさわしい型。
まとめ
テキストで扱いたいなら必ず0終端にする。