以下のC言語のソースでのchar *からint *への型変換の方法を教えて頂けませんか?
lang
1int *pinyear; 2int intcheckhizuke(char chymd[glen_chkymd]){ 3 pinyear = strtok(chymd, ".");
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
char *
で返ってきたものを(キャストを使ったりして)無理やりint *
の変数に入れたところで、整数として使うことはできません。C言語はそこまで高度な処理を勝手にやってくれるような言語ではありません。
もしstrtok
の返り値を整数にしたいのなら、変換関数を使って
lang
1int inyear=strtol(strtok(chymd, "."),NULL,10);
のように書く必要があります。
元のコードではint *pinyear;
となっていますが、intが消費するメモリは大した量ではありませんし(それだけのためにメモリ確保を自前でするのは煩雑すぎる)、このポインタが外部から供給されるような状況でなければ、素直にintの変数を建てるべきでしょう。
投稿2015/03/09 08:25
総合スコア145183
0
文字列から数値を取り出すのであれば、sscanf で良いのでは。
入力データから何かを取り出す scanf/fscanf と同じノリで文字列から取り出すことができますので、strtok も敢えて使わずに済むと思います。
投稿2015/03/21 02:07
総合スコア1672
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
標準ライブラリのatoi関数を使えばintとcharの変換はできます。
あとはint型の変数にその戻り値をいれてそのポインタを求めればcharからint*への変換はできると思います。
投稿2015/04/13 14:09
総合スコア18
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
まず、入ってくるデータがYMD形式,ピリオド区切りのデータである前提として記述させていただきます。
int型のポインタを宣言していますが、ポインタと文字列の理解が不十分なのではないかと思われます。
この場合、strtokの戻り値は 文字列 です。
たとえば2015.03.20というデータを例に挙げていきます。
このコードでは最初に "2015" [50,48,49,53] という文字列[文字コード]で帰ってきます。文字列をそのまま数字に代入することは出来ないので、一度 文字列→数字 変換関数 を使用して数字に変換する必要があります。
コードで記述しますと
lang
1int intcheckhizuke(char chymd[glen_chkymd]){ 2 /* "2015.03.20"というデータが入ってきたとする */ 3 int year; /* 年 */ 4 int month; /* 月 */ 5 int date; /* 日 */ 6 char *str; /* 文字列受け取り */ 7 8 /* 年 */ 9 str = strtok(chymd, "."); /* "2015"[50,48,49,53] */ 10 year = strtol(str, NULL, 10); /* 10進数に変換 */ 11 /* 月 */ 12 str = strtok(NULL, "."); /* "03"[48,51] */ 13 month = strtol(str, NULL, 10); /* 10進数に変換 */ 14 /* 日 */ 15 str = strtok(NULL, "."); /* "20"[50,48] */ 16 date = strtol(str, NULL, 10); /* 10進数に変換 */ 17 18 /* 以下省略 */
というようになります。
ポインタ 文字列 について検索したサイトをあげておきます。
http://www2.netf.org/pointer3.html
http://www9.plala.or.jp/sgwr-t/c/sec10-3.html
投稿2015/03/20 04:33
編集2015/03/20 04:35総合スコア24
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/09 09:08