• ベストアンサー

数値をポインタ文字配列に変換

整数型の数値を文字に変換しようと sprintfを使おうと思ったのですが ポインタの文字型配列を第一引数 にして変換すると エラー出てしまいます 開発環境はVC++2010で WindowsXPproです これは仕様なんでしょうか? もしそうなら他の変換方法はありますか?

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.4

対処としては…… char* yosoumozi[50]; yosoumozi[i] = malloc(10); sprintf(yosoumozi[i],"%d",yosou); /* 動的確保した領域に書き込み */ 使い終わったらfree()で解放して下さい。 char yosoumozi[50][10]; sprintf(yosoumozi[i],"%d",yosou); /* yosoumozi[i][0]~yosoumozi[i][9]の間に書き込み */ こっちなら解放は不要です。 サイズによってはスタックオーバーフロー起こす可能性もありますが。 どっちも数字として格納できるのは9桁までですけどね。 この書き方だと。

spmz1311
質問者

お礼

出来ました! ありがとうございます^^ わかり易かったです

その他の回答 (4)

回答No.5

50byte程度なら、スタックでも十分(と個人的に思っている)ので、確保すれば良いだけです。 int yosou; char yosoumozi[50]; sprintf(&yosoumozi[i],"%s",yosou); 以上ですね。

spmz1311
質問者

お礼

出来ました! 回答ありがとうございます^^

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>char* yosoumozi[50]; >sprintf(yosoumozi[i],"%d",yosou); yosoumozi[0]やyosoumozi[1]はドコを指しているのでしょうか? malloc()等で動的確保する。など行わないと「アドレスを指す箱を用意したけどどこ指しているかは未定」な状態ですが。 ダイレクトメールを送りたい。ということで封筒を用意(char* yosoumozi[50])しました。 入れるダイレクトメールの文章(yosouを数字として出力)も出来ました。 封筒に入れて…ポストに投函しました。 けど、届きませんでした。 宛名が未記入ですから。 ……あんましいい例えじゃないなぁ…。 >これは仕様なんでしょうか? 仕様…ですね。 「メモリ管理はプログラマの責任」ですし。 CPUは指定されたように「どっか判らないけどポインタが指している先」に書き込もうとしました。 が、OSにより「ソコには書いちゃダメ」と止められました。 その「どっか判らないけど指している先」がアクセス可能で書き換えも可能な場所だった場合には、OSに止められることもなく書き換えできます。 # 書き換えた結果、ハードティスクを破壊する。とかいう動作をしても正常です。そういうふうに書き換えたということになりますから。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

具体的にどのように記述して、どのようなエラーが出ましたか? >開発環境はVC++2010で http://msdn.microsoft.com/ja-jp/library/ybk95axf%28v=vs.100%29.aspx TCHAR関係で間違えている。とか… UNICODE 文字セットを使用する。の状態でsprintf()使って、渡したアドレスがchar*型だった…とか。 セキュリティ強化版を使うように。というワーニングだった…とか。

回答No.1

ソースを出して頂ければ、具体的なアドバイスが可能です。

spmz1311
質問者

補足

全部だと長くなりそなのでポイントを書きます int yosou; char* yosoumozi[50]; sprintf(yosoumozi[i],"%d",yosou); 一応こんな感じです 変数名は気にしないでください ビルドするときにエラーは出ないんですが 実行した時に 「"0x1027d337"の命令が"0x00000000"のメモリを参照しました。 メモリが"written"になることはできませんでした。」 とでます ソースはこんなかんじでいいでしょうか? 足りないのであればまた回答よろしくお願いします

関連するQ&A