文字連結するstrcat関数が使えません。
ビルドはokですが、実行すると、strcatの行で「strcat.asmが見つかりません」というエラーがでてきて、これ以上先に進みません。
具体的にどうしたら良いですか?教えてください。
> 具体的にどうしたら良いですか?教えてください。
まず、環境は?
OSとかコンパイラとか。(それぞれのバージョンも)
エラーの出たソースコードと再現手順を書いてみましょう。
OS: XP
コンパイラ:VISUAL C++
エラーメッセージ:
「ハンドルされていない例外は***.exeにあります。0xC0000005: Access Violation」
です。
よろしくお願いします。
バージョン入れるの忘れました。
コンパイラ:visual c++6.0です。
# strcatはバッファオーバフローとかでバグを生みやすいから…。
恐らく使い方がまずくて、落ちてると思うので、
その関数の前後の処理を公開してみてください。
char *ofilename;
char *ofilename2;
ofilename = "baa.txt" ;
ofilename2 = "1111" ;
strcat(ofilename,ofilename2);
こんな感じです。間違っていますでしょうか?
間違ってます。
書き込み不可能な領域に書き込みを行っているので、アプリケーション例外が発生して強制終了するのは正常な動作です。
char *ofilename;
char *ofilename2;
ここから文字列を格納する前に、必要な領域を確保しなければならないのでは?
mallocやnewなどで、必要なメモリ領域を確保したあとに文字列を格納。
その後にstrcatをしなければならないはずです。
こうしたときはメモリ領域の解放を忘れずに☆
また、文字列のバッファ長が固定でよいなら
char *ofilename;
char *ofilename2;
ではなく、
char ofilename[16];
char ofilename2[8];
strcpy(ofilename, "baa.txt");
strcpy(ofilename2, "1111");
strcat(ofilename,ofilename2);
としてもよいかもしれませんね。
strcatを使うときは、マージ先の文字列変数に十分な領域が確保されているかに注意しましょう。
char ofilename[8+4] = "baa.txt";
char *ofilename2 ="1111";
strcat(ofilename,ofilename2);
か
char *ofilename = new char[8 + 4];
char *ofilename2 ="1111";
strcpy(ofilename,"baa.txt");
strcat(ofilename,ofilename2);
// 用が済んだら
delete []ofilename;
のどちらかです。
ofilename2 は元投稿の範囲内では読み取りにしか使われていないので、領域確保は不要です。
VC++(C++)使ってるなら、string使った方が安全で便利だと思います。
#include <string>
std::string ofilename = "baa.txt";
std::string ofilename2 = "1111";
ofilename += ofilename2;
ツイート | ![]() |