• ベストアンサー

数字を文字列に

int i = 10; char *ch; とするとiを文字列としてchに代入し結果が ch[0] = 1 ch[1] = 0 となるようにするにはどう組めば良いのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 直接は関係ありませんが、sprintf する前に ch 変数をバッファに割り当てておいて下さいね。 「char *ch;」だけだと、実際に文字列を格納する 領域が無いので・・・。

f_attck
質問者

お礼

御回答ありがとうございます。 レスが遅くなり大変申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • onti
  • ベストアンサー率37% (9/24)
回答No.3

ch[0]=1、ch[1]=0と書いていますが、intは、ご存知の とおり数値型、charは文字型なので、sprintf()で編集 すると、ch[0]="1"(0x21)、ch[1]="0"(0x20)のコード で入りますが、それでよいのですか? もしも、ch[0]=0x01、ch[1]=0x00といれたいのであれば、 ビットシフト演算で代入すればできますよ。 ch[0] = (i >> 8) & 0x000000ff ch[1] = i & 0x000000ff

f_attck
質問者

お礼

御回答ありがとうございます。 レスが遅くなり大変申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。
noname#4252
noname#4252
回答No.1

sprintf(ch, "%d", i);

f_attck
質問者

お礼

御回答ありがとうございます。 レスが遅くなり大変申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列の扱い方

    初歩的な質問ですみません… str文字列からcという文字を見つけたら添字を返すという関数を作ったのですが、 iにこの関数を代入して、if文の制御式にiを使って比較するまでは正常なのですが、 真文にiを使うと何故か偽文(という言い方でいいのでしょうか…この場合("そんな値はありません。"というところです)が実行されてしまいます。 よろしければご教授お願い致します。 #include <stdio.h> int str_char(const char str[],int c) { int len = strlen(str); int i; for (i = 0;i < len;i++) { if (str[i] == c) return i; } return -1; } int main() { char str[64] = "Fucking Brutal Death Metal"; int ch,i; printf("どの文字を調べますか?"); scanf("%c",&ch); i = str_char(str,ch); if (i >= 0) printf("その文字は%d番目にあります。",str_char(str,ch) + 1); //何故かiだと動かない else printf("そんな値はありません。"); return 0; }

  • 文字列と整数型について

    はじめまして。 どうしても困っているのでヒントでも良いのでおねがいします。 関数内(func1)で確保した文字列変数のポインタを 別の関数(func2)にポインタ渡しします。 func2内で整数型で計算した結果を引数で示された文字列変数に 代入するというようなことをしたいと思ってます。 ここで、intは4byteとします。 メモリ長だけで見ると、bit[4] = tmp です。 void func1(){ char bit[4]; func2(bit); return; } void func2(char* p){ int tmp = 0x10101100; p = tmp; <---- ??? return; } そこでどのようにすれば、 代入することができるのか分かりません。 以下のような結果になるように代入したいと思っています。 bit[0] = 0x10; bit[1] = 0x10; bit[2] = 0x11; bit[3] = 0x00; 小さな文字列型に整数型をどのように渡せばよいのかが 一番疑問に思っているところです。 整数型に文字列型を代入する場合には 文字列のバイト指定とシフト演算で実現できています。 ヒントでもよいのでお願いします。

  • 文字列や文字から整数への変換方法について

    文字列(string型)や文字(char型)から整数(int型など)に変換 する時のルールがよく解りません。 たとえば、キーボードから数字を打って、その入力された数字を 数値として整数型の変数に代入したい場合のやり方です。 ちょっとプログラムを作ってみました。 using System; class clmain { private static void Main() { Console.Write("1桁の整数を入れてね "); char ch = char.Parse(Console.ReadLine()); int by1 = (int)ch; int by2 = (int)char.GetNumericValue(ch); Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch); Console.Write("整数を入れてね "); string st = Console.ReadLine(); /* by = (int)st; コンパイルエラー */ int by3 = int.Parse(st); Console.WriteLine("by3 = {0}, st = {1}", by3, st); } } まず、char型からint型への変換では、  int型変数=(int)char型変数; はコンパイルは通りますけど、実行すると全く違った値が入って しまいます。たとえば char型変数の値が "1" だと、int型変数には 49 が入ります。 int型変数 = (int)char.GetNumericValue(char型変数); と書いてようやく、思い通りの動きをしてくれます。 また、string型からint型への変換では  int型変数=(int)string型変数; はコンパイルエラーになります。 int型変数 = int.Parse(string型変数); とするとコンパイル出来て正しく動きます。 これで質問ですけど、 (1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか? (2)int型変数=(int)char型変数; とすると、上に書いたように、全く 違った(希望しない)値が代入されてしまいます。これは、どういう 動きをしているのでしょうか? また、これはコンパイルエラーに なりませんけど、どういう時にこの書き方をするのでしょうか? 解る方、お願いします。

  • 文字列中に含まれる文字の個数をカウントするプログラムについて…

    文字列、1文字が与えられたとき、これをポインタで入力し文字列中に含まれる文字の個数を計算するプログラムを作成せよ。 と、いう課題がだされたんですけど、ユーザが任意の文字列と1文字を入力できるようにすることができません…。 多分main関数の部分をちょっといじくればよいと思うのですが…。 どなたかアドバイスをお願いします。 #include <stdio.h> int count(const char *str, const char ch) { int cnt=0; while (*str!='\0') { if (*str==ch) cnt++; str++; } return cnt; } int main() { const char *str="hello,world!"; const ch='o'; int cnt; cnt=count(str, ch); printf("%s中に%cは%d個です\n", str, ch, cnt); return 0; }

  • 文字列をint型に変換したいのですが

    文字列をint型に変換して、計算に使用したいのですが うまくいきません。 char moji[0] = '1' moji[1] = '2' moji[2] = '3' この文字列をひとつずつint型の変数に代入したいのですが atoi関数を使用した場合、文字列全ての値が変換されてしまいます。 どうしたらいいのでしょうか? お答えいただけるとありがたいです。

  • 文字列をa→1b→2...z→26に変換する

    文字列を上記のように変換して表示するプログラムについて #include<stdio.h> int main() {    char ch[10];    printf("小文字のアルファベットの文字列を入力\n");    scanf("%s",&ch);    int i=0,j=97;    while(ch[i]!='\0'){      for(j; j<=97+26; j++){        if(ch[i]==j){          ch[i]=j-96;          printf("%d\n",ch[i]);        }      }    i++;    }    return 0; } 一文字の場合は問題ないのですが複数になるとうまくいきません 実行例 a 1 hello 8 となってしまいます。 改善をお願いします。

  • 文字列について

    textファイルをいくつかに分割して保存しようと思い、以下のプログラムを作りましたが、うまくいきません。 予定では "0000.txt", "0001.txt", ....と文字列を生成するはずです。 #include <stdio.h> #include <string.h> #define LENGTH 4 //番号の桁数 void filename(int n) {    char name[LENGTH +4 +1];    char text[5] = ".txt";    int i;    for(i = 0; i <= LENGTH; i++)       name[i] = '0';    i = LENGTH;    //自然数を文字列に変換    do{       name[i] = (char)(n%10 + 48);       i--;       n /= 10;    }while(n != 0 && i >= 0);    strcat(name, text);    printf("filename:%s", name); } int main(void) {    int i;    for(i = 0; i < 5; i++){       filename(i);       printf("\n");    }    return 0; } 実行結果は filename:00000@.txt filename:00001.txt filename:00002.txt filename:00003.txt filename:00004.txt このように、文字化けしています。 何が原因なのでしょうか。 よろしくお願いします。

  • 文字列を分解したいのですが・・・

    VC++初心者です。 ある文字列(数値、数値、数値CRLF数値、数値・・・)のような中からコンマで区切られた数字を取り出したいのですがうまくいきません。 とりあえずはコンマと改行コードの位置だけでも探したいのですがどうやったら良いでしょうか?お知恵を貸してください。 char buffer[64] = 10.52,5.88,4.37(改行コード)6.42,41.91; char* result; int ch1 = "CRLF"; result = strchr(buffer,ch1); int ch2 = "," result = strchr(buffer,ch2); 改行コードは最初の文字列に入ってるはずですが見えないので(改行コード)と入力しました。 よろしくお願いいたします。

  • 文字列から特定の文字を取り出したいです。

    文字列から特定の文字を取り出したいのですが、 char i="spacetestspace"; このように代入した場合 "space"の部分を無視して"test"だけを取り出す関数、又はやり方があれば教えてください。 よろしくお願いします。

  • 文字列のコピー

    文字列のコピーで長さの違う文字列をコピーすると変なふうになってしまいます。たとえば下のようにやるとdogeetみたいになってしまいます。dogだけを表示したいんです。strcpyやstrcatを使わずに文字の長さの違った文字列のコピーはどうやるんでしょうか? #include <stdio.h> int main (void){ char spelA[] = "street"; char spelB[] = "dog"; int i; for(i=0;spelB[i]!=0;i++){ spelA[i] = spelB[i]; } printf("%s\n",spelA); return(0); }