数値を文字列に変換しようとしているのですがうまくいきません。
_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.
というメッセージボックスが表示されます。
誰か助けてください。
No.2ベストアンサー
- 回答日時:
がると申します。
ちと気づいたので一言。sprintfのほうですが、ものすごく危険なことをやっているのでご注意下さい。
変数の宣言を最低限
char k[適当な数値];
にするか、あるいはサイズをきちんと計算してから、領域をmallocなどで動的にとるべきです。
記述されたプログラムだと、領域を確保していないポインタを扱おうとしているので。C言語の初心者が陥りやすい部分ではあるのですが、同時に、C言語としてはきわめて重要な部分です。
ポインタとメモリ周りを履修されなおすことをお勧めいたします。
ご回答ありがとうございます。
なんとか解決できました。
しかも勉強すべき項目まで教えていただいてすいません。
その辺りが重要な項目だということが身にしみてわかったので、
勉強しなおします。
丁寧なご説明ありがとうございました。
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);
という方法が可能です。
ご回答ありがとうございます。
なんとか解決できました。
しかもわざわざ複数の方法を教えていただきありがとうございます。
今後に活用させていただきます。
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です。
ご回答ありがとうございます。
なんとか解決できました。
丁寧な説明付きで複数の方法をアドバイスしていただきありがとうございます。
今後に活用させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
atoi( ) の反対をやりたい
-
テキストデータをそのままバイ...
-
下記のプログラムがコンパイラ...
-
_TCHAR*での引数の読み込み
-
C言語のfor文です。 繰り返しの...
-
str系関数を使わずに二つの文字...
-
至急!C言語文字列置換
-
C言語の入力した文字を反転させ...
-
型変換
-
charからLPTSTRへの変換方法
-
strlen関数と同じ働きをする関...
-
'const char *' 型は 'char *' ...
-
C言語 ミリ秒を日付に変換には
-
文字列から空白を取り除きたい...
-
C言語 共用体について コマンド...
-
C言語 文字列操作
-
c言語プログラミング実行時エラ...
-
間接参照のレベルが異なっています
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報