- ベストアンサー
c言語strchrのキャスト前後意味
- みんなの回答 (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)
関連するQ&A
- C言語のキャスト
キーボード操作で見たい画像を切り替えるというプログラムを作成しようとしているのですがエラーが起きてしまい出来ません。 例えば、キーボードで「a」と押せばAの画像が出るように文字列にAの画像のファイル名を代入して画像を表示させようと思ったのですが、 const char [2]' から 'char' に変換できません。 この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 というエラーが出てきます。 キャストという言葉は聞いたことがあるのですが、よくわかりません。 だれか教えてください。お願いします。
- ベストアンサー
- C・C++・C#
- C言語のキャストについて
お世話になります。 CRC-16の計算プログラムをC言語でつくりました。 例えば・・・1F 08 00 00 12 34 なら“1F0800001234”と入力すると【EEC2】と表示するプログラムです。 ただ・・・.Net SDKでコンパイルするとできたのですが、Visual C++2008でコンパイルするとエラーが出てしまいます。 (48) : error C2664: 'strlen' : 1 番目の引数を 'unsigned char [256]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 (52) : error C2664: 'strtol' : 1 番目の引数を 'unsigned char [3]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 型変換が必要ってことまではわかったのですが・・・必要なのはわかって行き詰まり状態です。。。 どのようしたらよいのでしょうか?ご教授をよろしくお願いします。 ソースは以下の通りです。 #include "stdafx.h" #include <stdio.h> #include <string.h> #include <stdlib.h> unsigned short crc_cal(unsigned short lng, unsigned char *str) { unsigned short crc, i, j, t; t= 0x0000; crc = 0xffff; for (i = 0; i < lng ; i++) { crc ^= (unsigned short) str[i]; t = (unsigned short) str[i]; for (j = 1; j <= 8; j++) { if (crc & 1) { // carry bit on crc = crc >> 1; crc ^= 0xa001; } else { // carry bit off crc = crc >> 1; } } } return crc; } int main(void) { unsigned char str[256],data[128],hexstr[3]; unsigned short crc,CRC,len; while(1) { printf("Please input key (HEX)\n"); scanf("%255s",str); hexstr[2]='\0'; for(len=0; len<(strlen(str)/2) ;len++) { hexstr[0]=str[len*2]; hexstr[1]=str[len*2+1]; data[len]=(unsigned char)strtol(hexstr, NULL, 16); } crc = crc_cal(len,data); CRC = (crc>>8) | (crc<<8); printf("\nCRC16 = %04X\n\n", CRC); } return 0; }
- ベストアンサー
- C・C++・C#
- 意味がわからないエラーがあります【14歳からはじめるC言語ゲームプログラミング】
14歳からはじめるC言語ゲームプログラミング(横スクロールアクションゲーム)をやっていて、第5章で意味がわからないエラーがでました・・・ error C2664: 'MessageBoxW' : 2 番目の引数を 'const char [25]' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 というもので、chap4.cppの23行目と67行目でひっかかりました。 どうすれば解決できますでしょうか。 C言語に詳しい方、よろしくおねがいします。
- 締切済み
- C・C++・C#
- C言語のキャストについて
C言語のキャストについて こんばんわ、質問です。 『キャスト』と言われる型を合わせるルールがあると思います。 あれはコンパイラに 「違う型の変数への代入だけど、これは意図したことですよ」 ってことを分かってもらうための手段という認識でよろしいでしょうか? コンパイル後、実行時には変数の型情報は使われない(残ってない?)と 思っていますが、その道を極めている方、教えてください。 キャストが何に使われるのか知りたいです。
- ベストアンサー
- C・C++・C#
- C キャスト方法を教えてください
C言語の初心者なのですが、 int abc(int(*read)(void*, int, int), int size, char* data); ような関数で第1引数の値をキャストするときどうすればよいですか。 int read = (????)NULL; そもそもint(*read)(void*, int, int)ってどういう意味ですか?
- ベストアンサー
- C・C++・C#
- 「*」←この記号はなに?【C言語】
http://ja.wikipedia.org/wiki/Gets このページなど、ウィキペディアなどでC言語の関数のページ(getsとかfopenとかなんでも)を見ると、形式の部分で :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: char *gets(char *s) :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ↑このように*が入って説明されているじゃないですか。*はポインタの前につけるんですよね?でもgetsはポインタじゃないです。 ソースコードの例でも、 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: char a[10]; :: :: gets(a); :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ↑のように*は省かれています。 このような「*」は一体何を意味するんでしょう? 回答よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C#のキャスト?
C#でのキャスト(?)で困ってます。 うまく説明できないので、下にCっぽい処理を書きます。 struct _hoge{ int i; char c[4]; double d; }; void f(){ BYTE data[16]; stream.read(data); // 何かから16Byte読み込み _hoge *st = (_hoge*)data; // ←ここ TRACE("%d,%c,%f",data->i,data->c[0],data->d); } //(結構いいかげんです) 上記処理のように、BYTEの配列で取得したデータを「struct _hoge」の型にキャストしてそれぞれの要素を取り出す、ということをC#で実現したいのですがMSDNやWebを結構探したのですがわかりませんでした。(何で検索していいのかがわかりませんでした・・・) 実現方法(もしくは検索キーワード)がわかる方、教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- キャスト変換について
VineLinuxでc言語を使って、カメラ画像から取得した物体の座標を別のPCのサーバープログラムにソケット通信で送信したい。 座標の変数がfloat型で格納されていて、そのX値とY値をcharでキャストして一つの変数に繋げてコード化し たいんですが、キャストの段階で数字を文字にできなくて 数字がなにかの文字やコードになってしまうので困ってます。 int x; int y; x = (char)Tbl2[1].X; y = (char)Tbl2[1].Y; printf("j - x=%c y=%c\n",x,y);
- ベストアンサー
- C・C++・C#
お礼
回答ありがとうございます。 参考URLは、大変参考になりました。