• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列のコピー)

文字列のコピーでエラーが発生する理由と解決方法は?

このQ&Aのポイント
  • エラーが発生する原因として、コピー先の文字列の長さが不足している可能性が考えられます。
  • コピー元の文字列の長さがコピー先の文字列の長さよりも長い場合、エラーが発生します。
  • 解決方法として、コピー先の文字列の長さを適切に設定するか、もしくはメモリ不足の場合はメモリを確保するなどの対策が考えられます。

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.4

#2ですが、前の質問 http://okwave.jp/qa/q6790973.html で要望の「作成された日付が古い順に取得」という処理が抜けておりました。 そういうことであるならば、上記質問の回答#4で指摘されているとおり、質問のコードの  lstrcpy(*ecoFileList, iter->second); の部分を  lstrcpy(*ecoFileList, iter->second.c_str()); に書き換えれば問題ないと思われます。 ……でも、#2で書いた ・intを戻り値にしているのに関数が値を返していない ・呼び出し元で想定した個数以上ファイルが存在した場合のことを考慮していない と言う部分は大丈夫でしょうか? それから、ファイル名が極端に長い場合に問題はありませんか?

その他の回答 (3)

回答No.3

> // 呼び出し元で個数を想定しなくていいようにstd::vectorを使う > // ついでに長いファイル名に対応するため可変長文字列であるstd::stringを使う > int DML_Backup::searchEcoDataFileName(std::vector<std::string>& ecoFileList) 僕ならこうするかな。 template<typename OutputIterator> OutputIterator DML_Backup::searchEcoDataFileName(OutputIterator result)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

まず、intを戻り値にしているのに関数が値を返していないのは問題です。 次に、その使い方からmap_type型はstd::map<FILETIME, TCHAR*>型かstd::map<FILETIME, TCHAR[MAX_PATH]>型と思われますが、前者は各要素のsecondにはfind_data.cFileNameのアドレスが入るだけですし、後者はコンパイルできないと思われます。 さらに、この処理で取得しているのはファイル名だけなので、最終更新日時とファイル名とのstd::mapを使う必要は全くありません。 最後に、取得したファイル名をecoFileListにコピーしていますが、呼び出し元で想定した個数以上ファイルが存在した場合のことを考慮していません。 結論としては、「処理の流れ自体は問題ないが、使う道具を間違えている」と言えます。 自分だったら、同様の処理はこうします。 // 呼び出し元で個数を想定しなくていいようにstd::vectorを使う // ついでに長いファイル名に対応するため可変長文字列であるstd::stringを使う int DML_Backup::searchEcoDataFileName(std::vector<std::string>& ecoFileList) { // std::mapの代わりにstd::vectorを使用……の予定だったが、書き換えたら関数内部の変数でファイル名を保持する必要が無くなった // ファイル名リストのクリア ecoFileList.clear(); WIN32_FIND_DATA find_data; HANDLE handle = FindFirstFile("*.ecd", &find_data); if ( handle != INVALID_HANDLE_VALUE) { do { // リストにファイル名を追加 ecoFileList.push_back(std::string(find_data.cFileName)); } while ( FindNextFile( handle, &find_data) ); FindClose(handle); } // 戻り値として取得したファイル名の個数を返す return ecoFileList.size(); }

回答No.1

- どの行でどんなエラーが出ましたか? - map_type ってなんですか?

関連するQ&A