- ベストアンサー
VC++6.0文字列処理でエラーが発生する
- VC++6.0を使って文字列処理を行っていますが、エラーが発生しています。
- エラーメッセージは「error C2057: 定数式が必要です」というもので、文字列処理の部分で発生しています。
- 不定ポインタの指す先でstrcpyなどの文字列処理関数を使うと実行時エラーになる可能性があるため、対処方法を探しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
# 忘れ物 ^^ callocで動的に確保しているので freeで開放してください 2番目の wchar_t *wCharBuf=L""; としてしまうと 文字列を書き込む領域が確保されていないため 他の変数や関数の戻り値などを破壊する可能性があります wchar_t wCharBUf[512];など必要なバッファ量をあらかじめ設定するか calloc/mallocまたは newなどで確保しましょう MultiByteToWideChar(CP_ACP, 0, fullPath, fullPathLength-1, wCharBuf, fullPathLength-1); は MultiByteToWideChar(CP_ACP, 0, fullPath, fullPathLength, wCharBuf, fullPathLength); がいいようです ^^
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
int fullPathLength = fullPath.GetLength() + 1; //*1 char charBuf[fullPathLength]; この記述ではコンパイルできませんね char charBuf[fullPathLength]; と記述すためにはfullPathLengthがコンパイル時点で確定している必要があります つまり #defineでなどで定義された定数や 10、20などの即値が必要です 一度 char配列にコピーしてから MultiByteToWideCharに渡していますがそのまま CStringから渡してやればいいはずですよ wchar_t* wcharBuf = (wchar_t*)calloc( fullPathLength, sizeof( wchar_t ) ); MultiByteToWideChar(CP_ACP, 0, fullPath, fullPathLength-1, wCharBuf, fullPathLength-1); といった具合で可能だと思います
お礼
どうもご回答ありがとうございます。 C言語は配列数の指定に定数が必要なんですね。その辺の基礎が飛び飛びで抜けているので、細かなコンパイルエラーが出て困ってます(;^^ 私は元々Java暦が長いので・・ また、CStringから直接MultiByteToWideChar関数に値を渡せるんですね。Windowsプログラムも中々知識が浅く、やたらめったらに実践的なものを組んでいる状態なので、検索しては無理やりパズルみたいにはめていってるので、こういうことも教えてもらえてとてもありがたいです。 No.2欄へのご回答により、やりたいことができるようになりました。おかげさまでとても助かりました。Javaができたからできるだろうと、予想して請け負ったはいいけど、えらい目にあっています(;^^ おかげさまで、無事解決できました。No.1とNo.2の回答が両方ともとても参考になりました。AmazonでCの古い本を買って本格的に全部網羅してみようとおもいます。断片的に色々理解してるのでいけるかと思ったんですが、やはりつらいですね。 ご親切にどうもありがとうございました。ちなみに、JavaよりMFCの方が面白いですね。どうもありがとうございました。 とても助かりました。