web-dev-qa-db-ja.com

mallocを使用してchar配列を割り当てる

こんにちは最近私はオンラインで(SOでも)たくさんのコードを見ました:

   char *p = malloc( sizeof(char) * ( len + 1 ) );

なぜsizeof(char)なのか?必要ないですね。それともスタイルの問題ですか?それにはどんな利点がありますか?

16
Nyan

はい、これはスタイルの問題です。なぜなら、sizeof(char)は常に1であると期待するからです。

一方、mallocを実行するときにsizeof(foo)を使用することは非常に慣用的であり、最も重要なことはコードを自己文書化することです。

おそらくメンテナンスにも適しています。 charからwcharに切り替える場合は、

_wchar *p = malloc( sizeof(wchar) * ( len + 1 ) );
_

あまり考えずに。一方、ステートメントchar *p = malloc( len + 1 );の変換には、さらに検討が必要です。それはすべて精神的なオーバーヘッドを減らすことです。

そして@Nyanがコメントで示唆しているように、あなたも行うことができます

_type *p = malloc( sizeof(*p) * ( len + 1 ) );
_

ゼロで終了する文字列と

_type *p = malloc( sizeof(*p) * len ) );
_

通常のバッファ用。

19
brainjam

操作を自己文書化するのに役立ちます。言語はcharをちょうど1バイトとして定義します。一部のマシンには8、12、16、19、または30ビットの最小アドレス可能単位(またはそれ以上)があるため、そのバイトにあるbitsの数は指定しません。ただし、charは常に1バイトです。

2
Amardeep AC9MF

仕様では、文字は1バイトであることを規定しているため、厳密にオプションです。私は個人的に常にsizeofを一貫性の目的で含めていますが、それは問題ではありません

1
Michael Mrozek