- ベストアンサー
コンパイルできるのに実行できない。
いつも教えて頂き有難うございます。 標記の件。 Ubuntuソフトウェアに付いているGeanyを使っています。 まぁまぁ使いやすいのですが、コンパイルできるのに 実行できない場合、どうしてますか? 間違いを探すのは、不可能なのではないかと思っております。 どうすればいいのでしょうか? ご多忙中恐れ入ります。 ご回答のほど宜しくお願い申し上げます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まず質問者さんは勘違いしていますが、プログラムは実行できないのではなく、実行できています。 想定通りの挙動ではないかもしれませんが、書かれた通りにきちんと動作しています。 さて本題ですが、No.2の方のお礼コメントにソースコードと実行結果が書かれているので、 それを元に想定通りに動かない原因を考えます。 実行結果が「ファイルをオープンできませんでした。」なので、それが表示される原因を探ります。 ソースコードを確認すると以下の行で実行結果の文字を表示しています。 printf("ファイルをオープンできませんでした。\n"); この文字表示が行われる条件は変数fpがNULLの時です。 ソースコードでそれを意味しているのは以下の行です。 if(fp == NULL){ 更にfpは何かを確認すると、以下の行でfopen関数を使って、 「test3.txt」というファイルを読み込もうとしていることが分かります。 fp = fopen("test3.txt", "r"); fopen関数の結果がNULLになるのはファイルを開くのに失敗した時です。 以上の流れから「test3.txt」ファイルが想定した場所に正しく存在しないため、 このような実行結果になったことが考えられるわけです。 コードの意味が解っていれば結果から原因を追うことができますが、 質問者さんはコードを丸々書き写しただけで1文1文の意味を理解していないため、 「間違いを探すのは、不可能なのではないか」 と思ってしまうような状況になっているわけです。 以前から質問者さんの質問を見ていたのですが、 質問者さんは仕事としてプログラミングをしたいのですよね。 質問者さんが何か月もかけてやろうとしていることは 一般的なプログラマーであれば数日もかからないことです。 ただ時間がかかるだけならまだ許されるかもしれませんが、 質問者さんの行き当たりばったりな行動をみていると、 セキュリティに穴を作りこんで個人情報を流出させてしまったり、 重要なデータを消してしまったりといったことを、 訳のわからないままやってしまう可能性が高いです。 そうなると最悪、損害賠償を請求されるようなことも考えられ、 お金を稼ぐどころかマイナスになることさえありえます。 趣味ではなく仕事としてプログラミングをしたいと考えているのであれば、 全く割に合わないので考え直すことをお勧めします。
その他の回答 (5)
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.4の追加です。 回答No.2へのお礼コメントに次のような記述を見つけました。 ---------ここから--------- 実行 ファイルをオープンできませんでした。 となった場合です。 ---------ここまで--------- ソースコードを見ると実行した結果、読み込もうとした「test3.txt」と言うフィルをオープンできなかったことによるもののようです。 従って、提示のソースコードをコンパイルし、ビルドできて実行できていると思います。 「ファイルをオープンできませんでした。」と表示するのは次のコードを実行した結果と思います。 fp = fopen("test3.txt", "r"); if(fp == NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } つまり、fp(ファイルポインタ)がfopen("test3.txt", "r")の戻り値なのでNULLだったのでしょう。(test3.txtと言うファイルがにつからなかった) 質問するときは正しい情報を提示してください。
お礼
ご回答誠にありがとうございました。 いつも、いつも申し訳ありません。 そのうち、精進致します。
- bunjii
- ベストアンサー率43% (3589/8249)
>Ubuntuソフトウェアに付いているGeanyを使っています。 OSをセットアップしただけではGeanyが無いと思います。 apt-getで追加インストールしないとGeanyを使えません。 >コンパイルできるのに実行できない場合、どうしてますか? 実行できないときエラーメッセージが出るはずです。 Geanyはコンパイルでオブジェクトファイルを作成し、ビルドでバイナリファイルを作成するようです。 ビルドしないと実行形式のバイナリファイルが作成されません。 UNIX系のOSでは実行形式のファイルに特定の拡張子を付加しませんので見分けがつかないかも知れません。
お礼
ありがとうございます。 コンパイルとビルド、そしてリントがあります。 /bin/sh: 1: cppcheck not found と書かれています。 多分、これがエラーの時、実行エラーになると思います。 /bin/sh: 1: cppcheck not foundが http://www.clear-code.com/blog/2016/2/3.html を見てもLinuxがよく解らないから解決できないでいます。 bunji様は解るでしょうね。 もし良かったら、ぜひ教えてください。 いつも申し訳ありません。 宜しくお願い申し上げます。
- wormhole
- ベストアンサー率28% (1626/5665)
>私は中々見つけられないのですが >探し方のコツはありますか? >あればどうか教えてください。 コツなんてものはありません。 あなたが毎回、質問をされた際、回答者は何を聞いてきましたか? 何をやって、その結果どうなったかを細かく聞いていませんでしたか?
お礼
面目ありません。 ケースバイケースで何を聞いて来たかは解りませんが、 私が何をどこまで、やったのか聞いてきたように思います。
- asuncion
- ベストアンサー率33% (2127/6289)
>実行できない 根拠は何ですか?エラーメッセージでも出ましたか?
お礼
ご回答誠にありがとうございました。 例えば、次のケースです。 #include <stdio.h> #define NUM 8 int main(void) { FILE *fp; int test[NUM]; int max, min; int i, j; fp = fopen("test3.txt", "r"); if(fp == NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } for(i=0; i<NUM; i++){ fscanf(fp, "%d", &test[i]); } max = test[0]; min = test[0]; for(j=0; j<NUM; j++){ if(max < test[j]) max = test[j]; if(min > test[j]) min = test[j]; printf("No.%-5d%d\n", j+1, test[j]); } printf("最高点は%dです。\n", max); printf("最低点は%dです。\n", min); fclose(fp); return 0; } 実行 ファイルをオープンできませんでした。 となった場合です。 ご回答の程、宜しくお願い申し上げます。
- wormhole
- ベストアンサー率28% (1626/5665)
どこかで何か間違ってるはずなので、それを探し出す。 >間違いを探すのは、不可能なのではないかと思っております。 >どうすればいいのでしょうか? 不可能なら諦めるしかないんじゃないですか? あなたが不可能だと思い込んでるだけでしょうけど。
お礼
ご回答誠にありがとうございます。 どこかに間違いがあるのですね。 解りました。 やってみます。
補足
私は中々見つけられないのですが 探し方のコツはありますか? あればどうか教えてください。 宜しくお願い申し上げます。
お礼
本当にすみません。 これからはプログラムの意味を把握することを 一義としてやっていこうと思います。