• ベストアンサー

c言語strchrのキャスト前後意味

C言語strchrkのc=(char)c の キャスト前と後のcの意味を教えてください。

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

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.5

No.1です。 別の質問で同じ内容について詳しく回答されているのでそちらのURLを記載しておきます。

参考URL:
http://okwave.jp/qa4151525.html
dreamsturb
質問者

お礼

回答ありがとうございます。 参考URLは、大変参考になりました。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> c = (char)c;の左辺値のCの値は、1バイトで型は、 > intですか、 すみません。意味がわかりません。 Cというのはどこから出てきたのでしょうか?

dreamsturb
質問者

お礼

回答、ありがとうございます。 Cは、左辺値の小文字cでint でした

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

strchrの実装における char *strchr(const char *s, int c) {  c = (char)c;  ... } のことだと勝手に解釈して回答します。 JIS X3010:2003の7.21.5.2 strchr関数から引用すると... 機能 strchr関数は, sが指す文字列の中で, c(char型に型変換する。)が最初に現れる位置を捜す。 とありますので、使用どおりcをcharに型変換しているということです。 cの値が0~SCHAR_MAXの範囲に収まっていなかった場合、unsigned charに型変換したり、0xffとのANDを取ったのでは仕様を満たすことができません。

dreamsturb
質問者

お礼

回答ありがとう御座います、今後も回答をお願いいます。

dreamsturb
質問者

補足

回答ありがとう御座います。 c = (char)c;の左辺値のCの値は、1バイトで型は、 intですか、  

回答No.2

strchrの検索文字がcharサイズで扱えない時に備えての処理だと思います。 cがintの場合・・・処理系依存(たぶん下と同じ) cがunsigned intの場合・・・charのサイズ(1バイト)だけ切り出し # 僕ならc&=0xff; と書きそう。。

dreamsturb
質問者

お礼

回答ありがとう御座います、今後も回答をお願いいます。

dreamsturb
質問者

補足

アドバイスありがとう御座います。キャスト後Cで切り出しし、わかりましたが、 左辺値Cの値は、char(1バイト)で、型intで文字列の文字の比較のためですか

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

関数は、strchr()ではなく、strchrk()ですか? それと、 >c=(char)c の キャスト前と後のcの意味を教えてください。 cは変数ですよね? であればcの型や、strchrk()(strchr()?)の使用されている前後についてもソースを記述してください。

dreamsturb
質問者

お礼

回答ありがとう御座います、今後も回答をお願いいます。

dreamsturb
質問者

補足

アドバイスありがとう御座います。関数は、strchrです、strchrのソースは、下記に書きました。  char *strch(const char *s,int c)  {   c=(char)c;    do     if(*s==c)

関連するQ&A