質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

4回答

2606閲覧

C言語の型変換について

monotetrapenta

総合スコア17

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/03/09 07:12

以下のC言語のソースでのchar *からint *への型変換の方法を教えて頂けませんか?

lang

1int *pinyear; 2int intcheckhizuke(char chymd[glen_chkymd]){ 3 pinyear = strtok(chymd, ".");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

char *で返ってきたものを(キャストを使ったりして)無理やりint *の変数に入れたところで、整数として使うことはできません。C言語はそこまで高度な処理を勝手にやってくれるような言語ではありません。

もしstrtokの返り値を整数にしたいのなら、変換関数を使って

lang

1int inyear=strtol(strtok(chymd, "."),NULL,10);

のように書く必要があります。

元のコードではint *pinyear;となっていますが、intが消費するメモリは大した量ではありませんし(それだけのためにメモリ確保を自前でするのは煩雑すぎる)、このポインタが外部から供給されるような状況でなければ、素直にintの変数を建てるべきでしょう。

投稿2015/03/09 08:25

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monotetrapenta

2015/03/09 09:08

早急な回答ありがとうございます参考にさせていただきます
guest

0

文字列から数値を取り出すのであれば、sscanf で良いのでは。
入力データから何かを取り出す scanf/fscanf と同じノリで文字列から取り出すことができますので、strtok も敢えて使わずに済むと思います。

投稿2015/03/21 02:07

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

標準ライブラリのatoi関数を使えばintとcharの変換はできます。
あとはint型の変数にその戻り値をいれてそのポインタを求めればchar
からint*への変換はできると思います。

投稿2015/04/13 14:09

sato_hiroaki

総合スコア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
yuu.s

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問