重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

つい最近C言語に手を出し始めた者です。
OSXにて、CotEditorとターミナルで地道にやってます。

http://www.sgnet.co.jp/c/4-3.htm
上記のサイトの「リスト10」のプログラムをコンパイル、実行すると
ターミナルが「Bus error」を吐いてきます。
何が問題なのですか?

A 回答 (4件)

何とも言えないけど


配列を41じゃなく とりあえず100くらいにしたらどうなる?

解消するようなら文字コードの違いによるbyte数の違い
件のは日本語1文字を2byteとしてぎりぎりに設定してある
OSXのターミナルでの文字やxcodeのgccが扱う文字コードによって日本語1文字が2byteであるとは保証できない。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

100にしたところ、あっさり解決しました。
指摘された事がズバリ的中していたようです。
ありがとうございました。

お礼日時:2007/02/10 19:40

私が知ってる限りでは、No3のフォーマット指定がないのは問題ないハズです。


macのことは全く知りませんが、
No2のことも気になりました。
printf("%d\n", sizeof("二つ目の引数を一つ目の引き数にコピーする"));
はどうなりますか。
char str[41];  
なので 41 より大きかったら問題あるかもしれないですね。

あと、gdbでいつ死んでるか調べるのもいいと思います。
こんな風にします。
$ gcc -g list10.c # などと -g をつけて コンパイルして
$ gdb a.out
(gdb) b main
(gdb) l #=> 多分list10.cのソースが出る
(gdb) n #=> 1行ずつ実行される。これを繰り返す

多分 strcpy() してるところか、main()が終るところで死んでるのではないかと思います。
    • good
    • 0
この回答へのお礼

sizeofが61になりましたので、やはりそこが問題だったようです。
gdbの方も試してみようと思います。
ありがとうございました。

お礼日時:2007/02/10 19:43

(3)のprintfで、書式文字列を指定していないためではないでしょうか。


試しに、
printf("%s\n", str);
と修正してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
勉強になりました。

お礼日時:2007/02/10 19:41

ハード屋をやってます。


OSX ということはCPUは68系かPowerPC でしょうか、
そのコンパイラとは縁がありませんが、
BUS Error というと例えば
メモリなどのデバイスが実装されていないアドレスを
アクセスすると発生する性質のエラーを意味する語として
使われてます。
該当するのか不明ですが心当たりありませんか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

文字コードの違いが問題だったようです。
無事解決しました。ありがとうございました。

お礼日時:2007/02/10 19:38

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