19

次の行を検討します。

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

sizeof(char)が使用されるのはなぜですか?必要ありませんよね?それともスタイルの問題ですか?

どのような利点がありますか?

4

3 に答える 3

24

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

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

おそらく、メンテナンスにも適しています。に切り替える場合は、に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 ) );

通常のバッファ用。

于 2010-06-25T04:38:31.770 に答える
2

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

于 2010-06-25T04:38:52.820 に答える
2

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

于 2010-06-25T04:38:58.610 に答える