• ベストアンサー

memset の第2引数の型

void *memset( void *dest, int c, size_t count ); 1文字の扱いはエラーを受け取るために char ではなく int が使われていることが多いようです。 一般的には1文字の扱いは int であるという習慣が memset に int が適用されている理由である と考えられますが、その他に memset に int が使われて いる大きなメリットは何かあるのでしょうか? char str1[] = "abcdefghi"; memset( str1, (int)0x41424344, 3 ); //DDDdefghi int i1[] = { 1, 2, 3, 4, 5 }; memset( i1, (int)0x10204080, 3 ); //0 800000 8000 80, 808080 2 3

質問者が選んだベストアンサー

  • ベストアンサー
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

何かへの便宜というよりは、昔の習慣そのままだと思います。 ANSI-C以前では、関数側の引数定義を行っても、実際に引数を渡す際には shortやcharはintに自動変換して渡していた(スタックに積んでいた)と思います。 つまり、charを定義していても 渡す側の変数char->intにしてスタック->関数側の変数になります。 そのため、shortやcharを引数にする関数は「無駄?」なのかintで 定義しているのかと思います。 同様にfloatもdoubleに変換されていたはずですから、floatを引数にする関数も無かったかと。 ちょっと、理屈としては弱いですが、こんな感じかと思います。

A__
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

0x80~0xffの文字は、singed char の範囲(128~155)で表現する場合と unsigned char の範囲(-128~-1)で表現する場合があり、memset()などの引数ではどちらの範囲の値もカバーするintで受けておき、内部でsigned charにcastするようにすれば、どちらの場合も問題なく処理できるから、、、ではないでしょうか?

A__
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A