• ベストアンサー

VC2005で数値を文字列に変換

数値を文字列に変換しようとしているのですがうまくいきません。 _itoa(),sprintf()を試したのですが何れもうまくいきません。 _itoa()の場合は, #include <stdlib.h> #include <stdio.h> CString k; int answer = 2; _itoa(answer,k); のようにすると error C2660: '_itoa' : 関数に 2 個の引数を指定できません。 というようなことが表示されます。 sprintf()の場合は、 #include <stdio.h> char* k; int answer = 2; sprintf(k,"%d",answer); のようにするとコンパイルは出来るのですが計算をし始めると、 Run-Time Check Failure #3 - The variable 'k' is being used without being defined. というメッセージボックスが表示されます。 誰か助けてください。

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。ちと気づいたので一言。 sprintfのほうですが、ものすごく危険なことをやっているのでご注意下さい。 変数の宣言を最低限 char k[適当な数値]; にするか、あるいはサイズをきちんと計算してから、領域をmallocなどで動的にとるべきです。 記述されたプログラムだと、領域を確保していないポインタを扱おうとしているので。C言語の初心者が陥りやすい部分ではあるのですが、同時に、C言語としてはきわめて重要な部分です。 ポインタとメモリ周りを履修されなおすことをお勧めいたします。

k314593
質問者

お礼

ご回答ありがとうございます。 なんとか解決できました。 しかも勉強すべき項目まで教えていただいてすいません。 その辺りが重要な項目だということが身にしみてわかったので、 勉強しなおします。 丁寧なご説明ありがとうございました。

その他の回答 (3)

回答No.4

VC2005との事ですが、VC2005はコンパイラの区別でいうとVC8 C++/CLI言語となりますよね? もし、C++/CLI言語で開発されている場合、全てのクラスはSystem::Object型の派生型なので、 int answer = 2; answer.ToString(); により、System::String型のハンドラを取得できます。 String型はそれ自体が文字列型ですが、char配列としたい場合、 char * k; int answer = 2; String ^ str = answer.ToString(); System::IntPtr ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAuto(str); k = (char * )ptr.ToPointer(); // 開放 System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr); という方法が可能です。

k314593
質問者

お礼

ご回答ありがとうございます。 なんとか解決できました。 しかもわざわざ複数の方法を教えていただきありがとうございます。 今後に活用させていただきます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

_itoaのエラーの理由は、実引数の渡し方が間違っているからです。次のようにする必要があります。 char k[50]; // 要素数は適当 int answer = 2; _itoa(answer, k, 10); ところで、数値から文字列への変換ですが、一般的には次のようにします。 int answer = 2; std::ostringstream osstr; osstr << 2; std::string str(osstr.str()); MFC等との親和性にやや難がありますが、これならint型だけでなく、longでもdoubleでもstd::complexでもOKです。

k314593
質問者

お礼

ご回答ありがとうございます。 なんとか解決できました。 丁寧な説明付きで複数の方法をアドバイスしていただきありがとうございます。 今後に活用させていただきます。

回答No.1

CString k; int answer = 2; k.Format("%d",answer); もしくは char k[2]; int answer = 2; sprintf(k,"%d",answer);

k314593
質問者

お礼

ご回答ありがとうございます。 なんとか解決できました。 ありがとうございました。

関連するQ&A

  • 文字列をint型へ変換するには?

    c言語初心者です。 こちらのプログラムだとうまく表示されません何故でしょう? わかる方是非教えていただきたいと思います。 #include<stdio.h> #include <stdlib.h> int main() { int  num ;     char sum1[4]; printf("数字 str1 =>"); scanf("%d",&num); num= atoi(sum11); printf("sum1= [%d]\n",num); } コマンドに数字を入力したあとintに変換してnumに表示させたいのですが、、、、

  • 文字列をうまく返してくれない

    数値を文字列として呼び出し元に渡し、呼び出し元で文字列を数値に変えようとしたのですがatoi関数(strtolを使うと最初の文字のみ帰ってくるため2桁以上の数値に対応できない)を使うとうまく行きませんでした。 どのように変更したらatoiが使える文字列になりますか? #include <stdio.h> #include <stdlib.h> static struct{   char *name; }kuda[5]={   { "もも" , "りんご" , "みかん" , "バナナ" , "パイナップル" } } char *re_3( void ){   int a = 3;   char str_h[100];   char *str;   sprintf_s( str_h , 100 , "%d" , a );   *str = *str_h; //原因はおそらくここ   return str; } void main( void ){   printf( "%s" , kuda[ atoi( re_3() ) ].name ); }

  • 文字列 数 変換

    数字列を数に変換できなかった男です。 以下はコンパイルエラー patn.c: In function 'input': patn.c:9:3: warning: function returns address of local variable [-Wreturn-local- addr] return (str); ^ 以下は実行後、 数を入力してください。 123.456 ・・,( 0.000000 0 0 以下は書いたプログラムです。 #include<stdio.h> #include<stdlib.h> char *input(void){ char str[100]; printf("数を入力してください。\n"); scanf("%s",str); return (str); } int main(void){ char *a; double d; int i; long l; a=input(); printf("%s\n",a); d=atof(a); i=atoi(a); l=atol(a); printf("%f %d %ld",d,i,l); return(0); } 関数input()にchar *str2; str2=str; return(str2);としても、実行後の表示はおかしいです。 123.456 123 123.456と表示したいです。御指摘お願いします。

  • 文字化け

    C言語初心者です。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("表示"); system("PAUSE"); return 0; } と書いてコンパイルしたのですが「表示」のところが文字化けしてしまいます。 他にも文字化けするかもしれないので、 解決法を教えて下さい。 使っているコンパイラは、Bloodshed Dev-C++です。

  • 文字列配列を動的に割り当てるアルゴリズムはこのようなものであっていますか?

    結果的に char strs[10][10]; と同じ領域を確保しようというものです。 ちなみにコンパイル時に warning C4700: local variable 'strs' used without having been initialized という警告がでますが、きちんと動作します。 この警告の意味することがわからないのと、今回のようなアルゴリズムとして適当なものであるのか教えてほしいです。 ↓以下ソース↓ #include <stdio.h> #include <stdlib.h> int main(){ char **strs; *strs = (char *)malloc(10); for( int i=0 ; i < 10 ; i++ ){ strs[i] = (char *)malloc(10); } strs[0] = "maiueo"; strs[1] = "kakiku"; printf("%s", strs[0] ); printf("%s", strs[1] ); for( int i=0 ; i < 10 ; i++ ){ free(strs[i]); } free( *strs ); return 0; }

  • intをcharに変換

    例えば,int型の数値をchar[]に変換したいと思っています. Windowsではstdlib.hをインクルードすると itoa()という関数が使えますが, Linuxでは使えず,itoaと同等のものを自分で作る必要があるようです. intは常に-10~-99の間なのでこんな風に書いてみたんですが, 出力してみると文字化けしててダメでした. void itoa2(int i,char *str){ str[0] = ' '; str[1] = '-'; str[2] = (-1*i)/10; str[3] = (-1*i)%10; } よい方法をご存知の方いらっしゃいませんでしょうか. Red Hat Enterprise Linux Client release 5.3 (Tikanga) gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-44) を使っています.

  • 文字配列から数値への変換

    MicrosoftのVisual-Studio 2005を使っています。 C/C++については、ほぼ素人で、困っています。 下記のような簡単なソースで、 456 012 678 を表示するようにしたいのですが、できなくて困っています。 最初の 123 789 345 は下記のソースで表記できたのですが、どうすればよいの でしょう? 数値をわざと文字列で読み込んで、これを 数値に変換しているのでややこしいのかもしれませんが、 できればこれでやりたいので、申し訳ありませんが、教えていただ けないのでしょうか。よろしくお願いします。 #include "stdafx.h" #include "stdlib.h" char str[3][200] = { "123 456", "789 012", "345 678" }; int _tmain(int argc, _TCHAR* argv[]) { int a[10]; for (argc = 0; argc < 3; argc++){ a[argc] = atof(str[argc]); printf("%d\n", a[argc]); }; return 0; }

  • CString: 識別子が見つかりません

    開発環境:Visual c++ 2008 Express Edion OS:Win XP Pro 次のエラーが表示されていて解決できません。 エラー内容は 1>d:\vc_source\dump\dump\Form1.h(448) : error C3861: 'CString': 識別子が見つかりませんでした です。 ちなみにinclude文は以下です。 #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <string> #include <cstring> やりたいことは String型からCString型を経由して、TCHAR型へ変換することです。またはその逆方法の変換です。そのためにCString型は必要になるのですが、そこでコンパイルエラーになっています。 知っているかがおりましたら、教えて下さい。

  • 文字の数値化 関数化

    文字を入力されたとき、数値入力を促す関数を作りたいのですが、 最初の文字が文字ならエラーメッセージがちゃんと出るのですが、 最初の文字が数字ならエラーメッセージが出てくれません。 アドバイスお願いいたします。 tew2 ← エラー出る 2test ← エラー出ない #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> float ss_input(void); int main(){ int i; int pop; printf("何人の入力しますか(3人以内)->"); do{ pop=ss_input(); if(pop >3) printf("3人以内でお願いします\n"); }while(pop<1 || pop>3); return 0; } float ss_input(void){ char p[100]; float st; int i=0; scanf("%s",p); while( p[i] != '\0'){ if(isdigit(p[i])==0){ printf("数値を入力してください->"); scanf("%s",p); continue; } else{ break; } } st=atof(p); return st; }

  • Run-Time Check Failure #3というエラーが出ます。

    //Run-Time Check Failure #3 - The variable 'Data' is being used without being defined. //というエラーが出ます。どうしたらいいですか? //プログラムの内容は、数値を格納するときに、二分木構造で格納していくというものです。 //多分違うような気がしますが、、 //よろしくお願いします。 #include<stdio.h> struct DATA { DATA *Small; DATA *Large; int Number; }; void InputData(DATA *Dat,int num) { if(Dat==NULL){Dat=new DATA;Dat->Number=num;return;} if(Dat->Number<num) { Dat->Large=new DATA; Dat=Dat->Large; InputData(Dat,num); } else if(Dat->Number>num) { Dat->Small=new DATA; Dat=Dat->Small; InputData(Dat,num); } return; } int main() { DATA *Data; InputData(Data,20);//<-ここでエラーが出ます。 InputData(Data,10); InputData(Data,30); return 0; }

専門家に質問してみよう