スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

scanf()の用法を間違えて「Bus error」と言われた...

忙しくて更新できませんでしたが、C言語の学習時につまずいた点があったのでこの機会に更新しようと思います。


「猫でもわかるC言語プログラミング」(第2版)の第8章練習問題をやっていたときのことでした。手慣らしというか試しに次のようなプログラムを作りました。

ユーザーに年齢入力を要求して、入力された数値から「あなたの年齢は ○○ 歳です。」と出力させるというプログラムです。

(gccでの)コンパイルはうまくできました。しかし、「あなたは何歳ですか? --> 」の次にscanfで入力要求を行い数値を入力してエンターキーを押すと、あるエラーが出てしまうのです。

あなたは何歳ですか? --> 18
Bus error


そうです。「Bus error」と出るんです。

そもそも私は「『バス』って、まさか乗り物ではあるまいな?」という疑問を持つくらいのレベルでして・・・(←致命的?)
頑張ってGoogleさんで調べてみました。

調べてみると、ありもしないメモリのアドレスにアクセスしようとした時に「Bus error」と出るそうです。
「あれっ、今回のプログラムでポインタ関連のことはやってないはずだが・・・」などと思って、かなり悩んでいたんですが、ある瞬間にピンと来ました。


「あっ、scanf()の2つ目の引数に“&”をつけ忘れてる!!


...という超凡ミスでした。

ここでは「scanf("%d", &x);」とすべきでした。


scanf()の2つ目の引数はポインタなんですよね。このscanf関数がその変数の値を変更できるようにポインタを渡してやらないといけないわけです。

C言語での経験がとてつもなく甘いので、これからも精進したいと思います。
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

コメントの投稿

非公開コメント

カテゴリー
ようこそ!
Author: Torasuke
Profile: 地元大学の情報系学部に息をひそめる二回生。
   SA SW


ブログ内検索
最近のコメント
オススメ
京都の大学生のラボブログ
Python,Java,Objective-C,GAE,Macなど
Python独習中の大学生のブログ


ltzz.info
ここの管理者さんには謁見済み!(えっ

 Use OpenOffice.org
無補償でも良いなら、MSOfficeよりOpenOfficeで十分です。

Mozilla Firefox ブラウザ無料ダウンロード
当サイトは、Firefoxというブラウザで動作確認しています。私は以前、IE派でしたが、一度乗り換えて慣れてしまうと、Firefoxのほうが便利だということを実感しました。

是非よろしくお願いします。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。