strcat関数が使えません。


すばる  2007-05-27 00:39:33  No: 65200  IP: 192.*.*.*

文字連結するstrcat関数が使えません。
ビルドはokですが、実行すると、strcatの行で「strcat.asmが見つかりません」というエラーがでてきて、これ以上先に進みません。
具体的にどうしたら良いですか?教えてください。

編集 削除
瀬戸っぷ  2007-05-27 01:14:51  No: 65201  IP: 192.*.*.*

> 具体的にどうしたら良いですか?教えてください。

まず、環境は?
OSとかコンパイラとか。(それぞれのバージョンも)
エラーの出たソースコードと再現手順を書いてみましょう。

編集 削除
すばる  2007-05-27 01:32:08  No: 65202  IP: 192.*.*.*

OS: XP
コンパイラ:VISUAL C++

エラーメッセージ:
「ハンドルされていない例外は***.exeにあります。0xC0000005: Access Violation」

です。
よろしくお願いします。

編集 削除
すばる  2007-05-27 01:32:58  No: 65203  IP: 192.*.*.*

バージョン入れるの忘れました。
コンパイラ:visual c++6.0です。

編集 削除
Ban  2007-05-27 02:51:19  No: 65204  IP: 192.*.*.*

# strcatはバッファオーバフローとかでバグを生みやすいから…。

恐らく使い方がまずくて、落ちてると思うので、
その関数の前後の処理を公開してみてください。

編集 削除
すばる  2007-05-27 09:57:21  No: 65205  IP: 192.*.*.*

char  *ofilename;
char  *ofilename2;

ofilename =  "baa.txt" ;
ofilename2 = "1111" ;
strcat(ofilename,ofilename2);  

こんな感じです。間違っていますでしょうか?

編集 削除
渋木宏明(ひどり)  URL  2007-05-27 10:01:05  No: 65206  IP: 192.*.*.*

間違ってます。

書き込み不可能な領域に書き込みを行っているので、アプリケーション例外が発生して強制終了するのは正常な動作です。

編集 削除
どら  2007-05-27 12:36:53  No: 65207  IP: 192.*.*.*

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を使うときは、マージ先の文字列変数に十分な領域が確保されているかに注意しましょう。

編集 削除
渋木宏明(ひどり)  URL  2007-05-27 19:38:01  No: 65208  IP: 192.*.*.*

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 は元投稿の範囲内では読み取りにしか使われていないので、領域確保は不要です。

編集 削除
Ban  2007-05-28 00:21:41  No: 65209  IP: 192.*.*.*

VC++(C++)使ってるなら、string使った方が安全で便利だと思います。

#include <string>

std::string ofilename = "baa.txt";
std::string ofilename2 = "1111";
ofilename += ofilename2;

編集 削除