質問: 僕の友達が僕のノーパソを勝手に頂戴して↓のコードを書いていきました。 勝手に頂戴するなんて許せないです。 彼のノーパソをベンディングしてもいいですか? という茶番はさておき、 聡明な先輩プログラマの方々に初心者な質問です 友達が書いたこのコード、関数を使ったものだと思うんですが馬鹿な自分はどういった仕組みなのかわかりません。 たしか変数bと変数aの値を足したものを出力するプログラミングだとおもうんですが・・・ 関数の仕組みから、このコードの流れまでを初心者向けにわかりやすく説明してくれますか? ちなみにこれをコンパイルしてコマンドプロンプトで実行したらで動作が停止しましたというエラーがでました。 修正したコードも教えてくれるとありがたいです。 ``` #include #include #include int tasu(int b,int a) { return b+a; } int main(int argc,char *argv[]) { int a=0; int b=0; int c=0; if(argc==1){ a=atoi(argv[1]); b=atoi(argv[2]); } else { scanf("%d",&a); scanf("%d",&b); } c=tasu(a,b); printf("%d\n",c); return 0; } ```
回答: お友達のプログラムには、誤りがある様です。 > > if(argc==1){ > > > は、引数の数がargcに入りますが、上記では1個かと聞いていますが、実は引数は無しの意味となります。 (プログラム自身を1と数えるので) 例 ./a.out の時はargc==1です。 問題はこのケース時に下記の処理を行うのでエラーとなります。 > > a=atoi(argv[1]); > > b=atoi(argv[2]); > > > argv[1]、argv[2]には何も入っていない状態ですのでエラーなります。コアダンプになるかも if(argc==3)とするのが正しいと思われます。(友達は、故意にそうしたかもしれませんが) 他の部分は、ドットインストールや多くのサイトにて説明が有りますので参考としてください。