• ベストアンサー

char型にint型の数値を代入する。

たとえば、 int num; char box;  numに何らかの整数値が入っているときに、そのnumの中に入っている値をchar型に文字列として代入したいときはどのようにすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

sprintf()っていう関数がありますよ。書式は sprintf(char型の配列の先頭ポインタ,フォーマット,変数...) 二番目の引数以降はprintf()の引数と同じです。たとえば int num; char box[256]; num=100; sprintf(box,"%d",num); printf("%s",box); →100と出力される

その他の回答 (2)

  • emonky
  • ベストアンサー率28% (18/63)
回答No.3

「char型にint型の数値を代入する」 と質問の内容をそのまま捉えれば box = (char)num; とキャストすれば代入できます。 #1さんと同じく文字列として代入 という意図がわからないです(^^;

  • hideo2004
  • ベストアンサー率35% (68/189)
回答No.1

文字列として代入というのが良くわからないです。 変数boxを文字列とするのならば、 char box[10]; などのようになります。 (char box; では文字列ではないです。) この場合は、itoa関数などを使ってはいかがでしょうか。 itoa( num, box, 10 );

関連するQ&A

  • int型のchar型への代入について

    VC++6.0のfgetcのヘルプに以下のようなコードが有りました。 int型のchをcharのbuffer[i]に代入するということに違和感を感じたのですが、 1.このようにする必要性とは何なのでしょうか? 2.このような代入により具体的には何が行われているのでしょうか? 3.そもそも1文字とりだすfgetcの戻り値がcharでなくintなのはなぜ? 質問が漠然としていて申し訳ありませんが、お願いします。  FILE *stream; char buffer[81]; int ch; 省略   stream = fopen( "fgetc.c", "r" )) 省略 ch = fgetc( stream ); 省略 buffer[i] = ch;

  • char型配列をint型に代入するには

    char型の配列(文字列)の各要素ににそれぞれ数字が一つ入れました。 str[0] = '0' str[1] = '1' : str[5] = '5' これをfor文を使ってint型変数に入れたい代入するにはどうれればいいですか? str[0] → dat1 str[1] → dat2 : str[5] → dat5

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • int型とchar型について

    C言語初心者です。 よろしくお願いします。 ◎1----------------------- #include<stdio.h> int main(void) { int ss[4]="789"; printf("%c\n",ss[0]); return 0; } --------------------------- ◎2----------------------- #include<stdio.h> int main(void) { int *p; p="789"; printf("%c\n",*p); return 0; } --------------------------- ◎1、◎2の2つのプログラムについて疑問があります。 ◎1の「int ss[4]="789";」と◎2の「int *p;」のintの部分は今まで、何の疑問も抱かず、「char」として入力していました。 そこでchar型は1バイトの整数、int型は4バイトの整数ということで容量が違うだけで、intとしても大丈夫だろうと思ったのですが、 ◎1では、「'initializing' : 'char [4]' から 'int [4]' に変換することはできません。」とエラーが出て、◎2では「'char [4]' から 'int *' に変換することはできません。」とエラーが出ます。 intは文字列は扱えないということなのでしょうか? 以上intだと実行できない理由がわかりません。 初歩的なことですいませんが、教えていただけると嬉しいです。

  • char型の扱える範囲とは?

    整数をchar型にしたいと思い int a = 250; char b[1]; sprintf(b, %d, a); と書いたのですが, char型の扱える整数の範囲である-256~255のint型の整数しか char型にこの場合変換できないということでいいでしょうか? またint型に代入できる値は,32bit以内の整数という考えでいいですか?

  • 文字型配列に数値を文字として代入したいです

    掲題の通りですが、listという配列に数値や文字を入れたいです。 数値は必ず整数1桁、文字はAかBの1文字です。 配列は char list[] = new char[8]; として定義しています。 numにAかBを入れると、代入も表示もうまくいきます。 しかし、数値を入れると以下のような動作となります。 list[i] = num とすると 「不適合な型: 精度が失われる可能性があるintからcharへの変換」 というエラーが表示されます。 list[i] = (char)num; に変更するとエラーは出ませんが、表示がうまくされません。 list[i] = String.valueOf(num); に変更すると 「エラー: 不適合な型: Stringをcharに変換できません:   list[i] = String.valueOf(num);」 というエラーが表示されます。 何か良い方法はないでしょうか。

  • int型をchar型に(右詰で)代入したい

    皆様いつもお世話になってマス(^^; 今回はint型の整数をchar型に(右詰で)入れる方法について int counter = 100; char input_kaisuu[10]; counter++; ↑今カウンターは101です。 これを「input_kaisuu」に右詰で設定したいのです。 "0000000101"←結果としてこんなかんじに。 ------------------------------------------------- ちなみにこんなことをやってみました。 sprintf(input_kaisuu, "%d", counter); このやり方だと左詰で"1010000000"というようになってしまい、 全然違う数になってしまいました。(^^; 他にいい方法があれば教えてください!

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

  • int rev_int(int num)文  関数の入門

    #include<stdio.h> /*---非負の整数を読み込んでます*/ int scan_uint(void) //関数scan_uintは、キーボードから非負の整数値を読み込んでその値を返す関数です。 { //この関数には受け取るべき仮引数がありません。仮引数がないことを示すためには()の中をvoidとします。 int tmp;//テンプの箱作成 do { printf("非負の整数を入力してください:"); scanf("%d", &tmp); if (tmp < 0) printf("\a負の数を入力しないでください"); } while (tmp < 0); return (tmp); } /* 非負の整数を逆転した値を返す */ int rev_int(int num) { int tmp = 0; if (num > 0){ do { tmp = tmp * 10 + num % 10; num /= 10; }while (num > 0); } return (tmp); } int main(void) { int nx = scan_uint(); printf("反転した値は%dです。\n", rev_int(nx)); return 0; } 教えてください!参考書に書いてあることをまとめて プログラムを読んでるのですが、わからない部分があります。 (1)まずint scan_uint(void)からこのプログラムは読み込んでるのでしょうか? どこかのサイトを調べたら、最初にint mainからプログラムは 読み込むというのを観たのですが、コンパイルして実行した動きをみるかぎり一番最初はint scan_uint(void)から読んでるように見えます。。。 (2)int scan_uint(void)の文は理解できました。私なりに解釈したのは ここでは正の数を入力しないと次に進まないことと 負の数を入力した場合、負の数を入力しないでくださいと注意がずっと でるという文です。 質問ですが、このあとint rev_int(int num)文に移ると思うのですが ここの int tmp = 0; これはこのint rev_int(int num)文のみの tmpの箱と参考書に記載がありました。つまり int scan_uint(void)で 出てきたtmpとは別個と解釈しました。 そうなると、int rev_int(int num)文を読んでみると tmpの箱を作成。そこは0を代入。 if文で num>0の時、 do文に入る (ここでいうnumは int numと宣言してないですけど、またscanfとか作って値はまだいれてないですけど??) do文は tmp = tmp*10 + num %10 num /=10 wile(num>0) これを見る限り、numという箱が見えません。全体を見渡しても どこかでnumに値が代入されたのち、このint rev_int(int num) という文を読みこんでいき if num>0のときと宣言されていますが もっと前の段階でnumの値が入力されていない限り このif文は適用されないと思ったのですが、プログラムは動いてます 三つ目の質問です tmp = tmp *10 + num % 10 num /=10 の部分がわかりませんでした。 tmpはまず、int scan_uint(void)で作成したtmpと int rev_intで登場してきたtmpとは別個と参考書に書いてあるのが 正しいのであれば tmpの値はここでは初のはずです。 一体いつ値を入力したのでしょうか? もしも一番最初のscanfの時に入力した例えば12345が此処でも適用されるなら tmp = 12345 ×10 + num % 10を tmpに代入するって文になりますが どうしてtmpを10かけるのですか?123450になり、 そのあとnumの値が此処でもまだ不明なのですがnum/10したものと 足すみたいですが、わかりませんでした。。。 まとめると、tmp = tmp*10+num%10がわかりません。 また、numとは何かわかりません、値もどの値がどこで代入されていて while(num>0)が引っかかるのか不明です。 tmpはint scan_uint文内で入力した値(scanfの部分で) 12345と仮に入力したら、それは次のint rev_int(int num)でも続いて活用されてるのですか? 参考書はなぜ別個と書いてるのかわかりません。 ごめんなさい>_< とても長くなりました。 どなたか解る方、教えてください、よろしくおねがいします。

  • char型+char型ってint型? if(char型==int型)?

    C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。 char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。 (下のプログラムの printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ という部分の結果は4なので、int型と考えるべきなのかな。) 私は、char型とint型の加算の結果はint型だと思っていましたが、 char型とchar型の加算の結果はやはりchar型だと思っていました。 (それが間違えているのでしょうか。) if(a[0]==i) /* char型とint型の比較(?) */ の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。 (私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。) 左辺はchar型のように見えて、じつはint型ですか。 #include <stdio.h> int main(void) { char a[4]; int i=77; printf("sizeof(int)は%d\n", sizeof(int)); printf("sizeof(char)は%d\n", sizeof(char)); printf("sizeof('M')は%d\n", sizeof('M')); printf("sizeof(a[0])は%d\n", sizeof(a[0])); a[0]='M'; a[1]=7+6; a[2]=a[0]+a[1]; printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ printf("sizeof(+a[0])=%d\n", sizeof(+a[0])); if(a[0]==i) /* char型とint型の比較(?) */ puts("a[0]==i"); else puts("a[0]!=i"); return(0); } ちなみにワーニングもエラーもなんにもでません。

専門家に質問してみよう