- ベストアンサー
c言語strchrのキャスト前後意味
C言語strchrkのc=(char)c の キャスト前と後のcの意味を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 別の質問で同じ内容について詳しく回答されているのでそちらのURLを記載しておきます。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
> c = (char)c;の左辺値のCの値は、1バイトで型は、 > intですか、 すみません。意味がわかりません。 Cというのはどこから出てきたのでしょうか?
お礼
回答、ありがとうございます。 Cは、左辺値の小文字cでint でした
- jacta
- ベストアンサー率26% (845/3158)
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を取ったのでは仕様を満たすことができません。
お礼
回答ありがとう御座います、今後も回答をお願いいます。
補足
回答ありがとう御座います。 c = (char)c;の左辺値のCの値は、1バイトで型は、 intですか、
- JaritenCat
- ベストアンサー率37% (122/322)
strchrの検索文字がcharサイズで扱えない時に備えての処理だと思います。 cがintの場合・・・処理系依存(たぶん下と同じ) cがunsigned intの場合・・・charのサイズ(1バイト)だけ切り出し # 僕ならc&=0xff; と書きそう。。
お礼
回答ありがとう御座います、今後も回答をお願いいます。
補足
アドバイスありがとう御座います。キャスト後Cで切り出しし、わかりましたが、 左辺値Cの値は、char(1バイト)で、型intで文字列の文字の比較のためですか
- arain
- ベストアンサー率27% (292/1049)
関数は、strchr()ではなく、strchrk()ですか? それと、 >c=(char)c の キャスト前と後のcの意味を教えてください。 cは変数ですよね? であればcの型や、strchrk()(strchr()?)の使用されている前後についてもソースを記述してください。
お礼
回答ありがとう御座います、今後も回答をお願いいます。
補足
アドバイスありがとう御座います。関数は、strchrです、strchrのソースは、下記に書きました。 char *strch(const char *s,int c) { c=(char)c; do if(*s==c)
お礼
回答ありがとうございます。 参考URLは、大変参考になりました。