掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27973

配列格納についての質問
投稿者---hal(2006/08/19 08:17:20)


初めまして

少し具体性に欠ける質問ですが、char型配列の中にint型の変数を形は変えずに格納する方法は無いでしょうか?

例えば
char c[MAX];
int d = 3;
c[0] = d;

のように、数字を直接でなく、何らかの変数を間において格納したい場合のことです

どうかお願いします


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列格納についての質問 27974 とろり 2006/08/19 10:06:48


No.27974

Re:配列格納についての質問
投稿者---とろり(2006/08/19 10:06:48)


こんにちは。

>char c[MAX];
>int d = 3;
>c[0] = d;

上記で
c[0] = d;
とすることは可能です。
(コンパイラにもよりますが、)警告は出てもエラーにはならないと思います。
まぁ、一般的にはキャストしますが。
⇒ c[0] = (char)d;

ただし、サイズには気を付けないといけません。
サイズの大きいint型(32bitマシンなら4バイト)からcharに格納する場合、あふれた分はなくなります。
データ上、これがないと分かっている場合はキャストして格納すれば良いでしょう。


この投稿にコメントする

削除パスワード

No.27975

Re:配列格納についての質問
投稿者---hal(2006/08/19 10:29:54)


返信ありがとうございます

> c[0] = (char)d;

すいません。言葉が足りなかったようで

c[MAX];
int d = 3;
と定義した時、
c[0] = d;
として、
c[0] = '3';
にしたかったのです

c[0] = (char)dだと、
dが変換されるのですこし望んでいるものと違いました
説明不足申し訳ないです


この投稿にコメントする

削除パスワード

No.27976

Re:配列格納についての質問
投稿者---Blue(2006/08/19 10:47:40)


c[ 0 ] = '3';

は 3 という数字ではなく、'3' という文字コードが入ります。
参考)ASCIIコード表

ですので、 3 と '3' との値の差分を引いて入れてあげればよいでしょう。

'3' は 0x33(51) なので 0x03(3) にするには、、、


また、('\0'で終わる)文字型配列ならば関数を使って格納することも可能です。

sprintf( c, "%d", d );

ただし、この場合 c[ 0 ] = '3', c[ 1 ] = '\0'と 2文字分格納されますので、
文字型配列でない、単なる 文字型変数 には格納できません。

同様の関数として、itoa というのもあります。



この投稿にコメントする

削除パスワード

No.27979

Re:配列格納についての質問
投稿者---Blue(2006/08/19 11:33:35)


> ですので、 3 と '3' との値の差分を引いて入れてあげればよいでしょう。
>
> '3' は 0x33(51) なので 0x03(3) にするには、、、
とろりさんのレスをみて気づきました。
これらは逆でしたね。

訂正)

ですので、 3 と '3' との値の差分を足して入れてあげればよいでしょう。

'3' は 0x33(51) なので 0x03(3) から変換するには、、、

→差分は 0x30(48) つまり '0'
→とろりさんのレスの c[0] = '0' + d; となる


この投稿にコメントする

削除パスワード

No.27978

Re:配列格納についての質問
投稿者---とろり(2006/08/19 11:26:20)


Cにおいて、数字 '0'〜'9' の文字コードは連続性が保障されているそうです。(詳しくは知りませんが)
ゆえに、
c[0] = '0' + d;
で格納可能なはずです。

なお、数値を「文字列」で扱う場合は話しが違ってきます。(Blueさんの投稿参照。)


あと、ちょっとつっこみ。
>c[0] = (char)dだと、
>dが変換されるのですこし望んでいるものと違いました
「変換されない」ので望んでいるものと違うはずです。


この投稿にコメントする

削除パスワード

No.27980

Re:配列格納についての質問
投稿者---hal(2006/08/20 10:03:17)


>とろりさん、Blueさん

ありがとうございます
その後何とか解決しました

手間をおかけしました


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧