みんなでソースコードをレビューしよう検索_tstofの代わりの関数ソースコードを公開してみんなにつっこんでもらおう!という主旨のグループです。ce上で_tstof()を使おうとしたら、「そんな関数定義されてない」とコンパイラに怒られたため、_tstof()関数の換わりの関数を作ってみました。変数の命名法がよくわからないため、なおのこと読みづらいコードになっていると思いますが、その点も含めて酷評希望です。8年前レビューでなくてすみません。未確認ですが、以下のいずれかの方法が使えるようですが。・WideCharToMultiByteでANSI文字列(char)に変換してatof・_tcstodどちらの関数も調べてみました。コンパイラから「定義されていない」と起こられることもなく、まだ、試していないのですが、調べた限りではうまくいきそうです。一回charに変換すればいいというのは盲点でした。_tstofが使えないならatofもつかえないだろうという先入観に取り付かれていました。ce上で自分がプログラミングする上では、16桁を超える変数を扱うとしたら、その数値自体がもともとエラーになるべきものなので、16桁までにしました。汎用性を考えてもっと広い範囲を使えるようにメモリの動的確保等で対応するべきなのでしょうか?>>"0.2"など、先頭に符号がない場合、エラーになる>>"-5"などの整数表現に対して、正しい結果が得られないそのとおりですね。テストをするべきでした。-2.5"など、先頭に空白があるとエラーになるmy_tstof()内部で処理したほうがいいのでしょうか?引数に渡す値にエラーがないかチェックしてから渡したほうがバグを減らせるように感じるのですが。eとは自然対数のことでいいのですよね?対数や複素数はこのmy_tstof()を呼び出すプログラム中で使わないことがはっきりとしているので、わざと作っていません。8年前16桁までしか扱えないのが問題ではなく、配列の範囲外にアクセスしてしまうのが問題だという指摘でした。以下のプログラムで、_tcslen(buf)が17だとすると、x[16]にアクセスしてしまうので、別のメモリ領域の値を破壊してしまう可能性があります。変換できない文字列が入力されたら0を返すと、2通りの設計があると思います。(1)の場合は、my_tstof_checkのような処理を別に用意することになるかと思います。白さんのコードを見ると、(2)であると解釈したので、16桁を超える入力があった場合は、0を返すべきだと思いました。.1は0.1と同じ意味になります。eを使った表現は、指数表現です。0.05を意味します。5e-2;などは、C言語やC++では文法上正しい表記です。8年前(int)_tcslen(buf)>=16のときにx[20]とかbuf[21]とかにアクセスして別のメモリ領域を書き換えてしまう、という理解で大丈夫ですか?今の今までそんなこと考えても見ませんでした。16桁を超える場合の処理を書きます。5e-2;こんな表記方法もC/C++でも許さているのですか!!すごく勉強になります。今回はこのような入力を受け取ることがないのがわかっているので、使いませんが、今度必要になってくるはずなのでこのページをしっかりとブックマークします。罵詈雑言の嵐を予想していただけに、これほど親切に批評していただけ、ありがとうございました。ミクプラは自由にリンクできます。