strcat関数が使えません。


すばる  2007-05-27 09:39:33  No: 65200

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


瀬戸っぷ  2007-05-27 10:14:51  No: 65201

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

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


すばる  2007-05-27 10:32:08  No: 65202

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

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

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


すばる  2007-05-27 10:32:58  No: 65203

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


Ban  2007-05-27 11:51:19  No: 65204

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

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


すばる  2007-05-27 18:57:21  No: 65205

char  *ofilename;
char  *ofilename2;

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

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


渋木宏明(ひどり)  URL  2007-05-27 19:01:05  No: 65206

間違ってます。

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


どら  2007-05-27 21:36:53  No: 65207

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-28 04:38:01  No: 65208

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 09:21:41  No: 65209

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

#include <string>

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加