dポイントプレゼントキャンペーン実施中!

#include <iostream.h>
#include <string.h>
int main(){char a[]="a";char b[]="b";
char c[]="c";
for(int d=0;d<3;d++){strcat(a,b);
strcat(a,c);cout<<a;}}


このc言語プログラムの実行結果を、abcbcbc したいのですが、例外処理されます。解決方法お願いします。後、又簡単な連結方法教えてください。

A 回答 (5件)

a b c には、それぞれ "a" "b" "c"のポインタが


格納されていて、それぞれサイズは、\0を入れて
2バイトが確保されています。

strcatで、aにbやcをくっつけようとしていますが
aが指す領域には2バイトしか確保されていなく
不正な領域に bやcの指す内容をくっつけようとして
るので、例外がでると思います。

ので、一時的に
char work[128];
と先に確保しておいて、workに文字をくっくけて
いってはどうでしょうか。

(strcpy(work , "")等の初期化も忘れずに。)
    • good
    • 0
この回答へのお礼

有り難う御座います

お礼日時:2003/05/05 11:24

cout << a;


は C++ で標準出力に a を出力する時の書き方ですね。

dtt さんがおっしゃるように本当に「c言語プログラム」
なら使えないんですけどね。
    • good
    • 0
この回答へのお礼

有り難う御座います

お礼日時:2003/05/05 11:21

>例外処理されます


aは領域を確保してください。

>abcbcbc したいのですが
これでどうですか?
int main(){
char a[10];
strcpy(a,"a");
for(int d=0;d<3;d++)
strcat(a,"bc");
}

最後の「cout<<a;」は、何?
    • good
    • 0
この回答へのお礼

有り難う御座います

お礼日時:2003/05/05 11:22

"abcbcbc" を入れられるように、


char a[] のサイズを大きめに確保しておかないといけませんね。

"abcbcbc" のサイズは終端のヌル文字を含めて 8 バイトなので、
char a[8]="a";
で OK です。

> 後、又簡単な連結方法教えてください。

C++ をお使いのようなので、
#inlcude <string>
std::string a = "a";
a += b;
とすれば配列のサイズを意識することなく文字列の連結が出来ます。

# とはいえ C 言語でのの文字列の扱いは重要なので、
# しっかりおさえておいてください。

> #include <iostream.h>
これは古い C++ の仕様での書き方なので、
#include <iostream>
とするほうがよいです。
お使いのコンパイラが古いものなら仕方ありませんが。
    • good
    • 0
この回答へのお礼

有り難う御座います

お礼日時:2003/05/05 11:28

連結用のバッファがないからですよ



あと
#include <iostream.h>
は不要で
cout<<a;
の意味がわかりません

参考
#include <string.h>
int main()
{
char a[]="a";
char b[]="b";
char c[]="c";
char out[100];
memset (out,0,100);
strcat(out,a);
strcat(out,b);
strcat(out,c);
strcat(out,b);
strcat(out,c);
strcat(out,b);
strcat(out,c);
}
    • good
    • 0
この回答へのお礼

有り難う御座います

お礼日時:2003/05/05 11:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!