おはようございます。
文字列の連結をしようとすると
「ハンドルされていない例外は a.exe にあります:0xC0000005:Access Violation」
というエラーがデバック中に出ます。
普通に実行すると強制終了になります。
このエラーはどういう意味なのでしょうか?
例えば、こんなソースを書くと同様のエラーが出るはずです。
-------------------------------
char s[4];
strcpy(s,123);
strcat(s,456);
-------------------------------
配列のサイズは4と宣言しているのに、それ以上の書き込みをしているためです。
こんなことはしていませんか?
struct Alpha_Table{
char han[3]; /* 半角 */
char zen[3]; /* 全角 */
}AlphaTable[]={
A,A,B,B,C,C,D,D,E,E,
F,F,G,G,H,H,I,I,J,J,...
char szNew[100];
strcat( szNew, (char *)AlphaTable[j].han[0]);
このような感じになっているのですが、
これもsaraさんの言うように、サイズがあっていないのでしょうか?
szNewには何も入っていません。
memset( szNew, 0x00, sizeof(szNew) );
で初期化しています。
> strcat( szNew, (char *)AlphaTable[j].han[0]);
これはまずいです。正しくは、
strcat( szNew, AlphaTable[j].han);
又は
strcat( szNew, &AlphaTable[j].han[0]);
でしょう。
なぜ、エラーになったかというと、2番目の引数で AlphaTable[j].han[0]の値(j=0な
ら'A')をアドレスとしてアクセスしようとしたからです。
saraさんの意見の通りになおしたら
無事にエラーがなくなりました。
ありがとうございました。