• ベストアンサー

Linux上で、C言語で作ったプログラムを実行させる方法

VineLinux2.1のvi:スクリーンエディタを利用して簡単なプログラムを実行させたいのですが、コンパイルしたファイルを実行すると a.out : command not found というエラーがでてきます。 実行のさせ方がおかしいのでしょうか? 今回作ったプログラムです。 #include <stdio.h> int main(){ printf("Hello World!"); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • piroping
  • ベストアンサー率50% (11/22)
回答No.3

Segmentation fault が表示されたということは実行できたということですね。 # …でも、真っ当なプログラムになってないみたいですが。 Path (←プログラムを探すディレクトリ…というと語弊があるかな?) に Current Directory (現在のディレクトリ)が含まれていないので、 Current Directory のファイルを実行する場合には、 「./」をファイル名の前に書いてやるなどの必要があるのです。 このあたりは DOS とは違います。

masaru_kai
質問者

お礼

新しく作ったディレクトリで作業をしていたので駄目だったというわけですね。 実行できているということは、プログラムの組み方が間違っているということですね。 ありがとうございました。 プログラムをいじっていろいろ試してみます。

その他の回答 (4)

  • inetd
  • ベストアンサー率23% (43/184)
回答No.5

コンパイル後にカレントディレクトリに作られた a.out を実行する時は ./a.out でやってた方が良いと思います。PATH の設定を変えてカレントディレクトリも実行できるようにしちゃうとちょっと危なっかしいと思うので。 で、 Segmentation fault と出るというのはそのプログラムのどこかが間違っていてNULLポインターをアクセスしていたりするからだと思いますが、見た感じ間違いようがなさそうなプログラムですね・・・。よくわかりませんが、他のプログラムもそのディレクトリでコンパイルしていてその時作られた別のプログラムの a.out が残っていたりしませんか? その疑いがある場合は再度コンパイルしてから実行してみましょう。 あと、たいした問題ではありませんが、そのプログラムのままだと Hello World! の文字列出力後に改行がないので見た目が変になるかも知れません。なので printf("Hello World!\n"); にした方が良いかも(両方試してみれば違いが分かると思います。わからなかったら printf("Hello\nWorld!\n"); とかして見ましょう。\n が何かということについては入門書などを見て確認して下さい)。

masaru_kai
質問者

お礼

>で、 Segmentation fault と出るというのはそのプログラムのどこかが間違っていてNULLポインターをアクセスしていたりするからだと思いますが、見た感じ間違いようがなさそうなプログラムですね・・・。よくわかりませんが、他のプログラムもそのディレクトリでコンパイルしていてその時作られた別のプログラムの a.out が残っていたりしませんか? その疑いがある場合は再度コンパイルしてから実行してみましょう。 すみません。確認してみるとa.outは別のプログラムでした。 あと、\nの有無の違いもちゃんと分かりました。 ありがとうございました。

  • piroping
  • ベストアンサー率50% (11/22)
回答No.4

追記です。 下記 URL を参照してください。

参考URL:
http://www.jp.freebsd.org/QandA/HTML/130.html
  • n_tonbi
  • ベストアンサー率75% (9/12)
回答No.2

ひょっとして実行許可をしてなかったりしてσ(^^) #chmod a+x a.out

masaru_kai
質問者

お礼

回答ありがとうございます。 #chmod a+x a.out #a.out bash: a.out: command not found と、なりました。 プログラムがおかしいのでしょうか?

  • piroping
  • ベストアンサー率50% (11/22)
回答No.1

command not found なので、そのまま a.out が見つからないというエラーかと思います。 ls で見たときに a.out はできていますか? ./a.out と叩くとどうでしょうか? # Current Directory に Path が張ってない関係?

masaru_kai
質問者

お礼

回答ありがとうございます。 ls で見たときに a.out は緑色で出てきています。 ./a.out と叩くと Segmentation fault (core dumped) と、出てきました。 # Current Directory に Path が張ってないというのは、どういうことなんでしょうか?

関連するQ&A

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • c言語のプログラムの実行

    #include<stdio.h> int main() { int val; val=5; printf("今、変数の中身は、%dです\n", val); val=val+1; printf("今、変数の中身は、 %dです\n", val); val=val++; printf("今、変数の中身は、 %dです\n", val); return 0; } をファイル名 aaa  として、 %  gcc  aaa.c  で無事コンパイルできましたが、いざ実行しようと % ./aaa    Enter とすると ./aaa.out:コマンドが見つかりません.  となります。 また 別に %  ./aaa.out Enter としても上と同様な結果になります。 ぜひ、お答えを頂きたいです。     この時は unixとwindows98を使用しています。  

  • C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると

    C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。

  • C言語

    以下のようなhello.cがあります。 include<stdio.h> int main(void) { printf("Hello World! \n"); return 0; } gcc -E hello.c と打つとプリプロセッサが表示されます。 課題はこの中からprintfに関するものを見つけ、読み取れることを説明せよとのことです。 問題の意図と解き方がわかりません。 よろしくお願いします。 環境はwsl ubuntu です。

  • C言語のプログラムについて。

    #include <stdio.h> int main(void) {   int hoge,piyo;   printf("数値を入力せよ。:");   scanf("%d",&hoge);   piyo = hoge % 2;   if (piyo == 0) {     printf("%dは、偶数。\n",hoge);   } else {     printf("%dは、奇数。\n",hoge);   };   return 0; } という、プログラムが、実行できません。 といって、エラーメッセージがでてくれないので、困っています。 ひょっとして、非常に初歩的なミスという気もするのですが。 これはよかった!という、C言語に関する書籍、また、コンピュータのシステムに関する書籍がありましたら、合わせてご教授ください。

  • 他の実行ファイルを実行するプログラム

    他の実行ファイルを実行するプログラムを作りたいです。 わかりにくいと思うので例を書いて説明します。 まずhello.cというプログラムがあったとします。 中身は -hello.c----------------- #include <stdio.h> main(){ printf("Hello!\n"); } -------------------------- これをコンパイルしてできた実行ファイルを他のプログラムから呼び出す?実行したいんです。 説明が下手ですいません(>_<) たとえば新しくexe.cというプログラムを作ります。 このexeを実行するとhello.exeが呼び出されて 結果的にhello.cの中身が実行されるような exe.cを作りたいです。 初歩的な質問ですいません。 どなたかアドバイスいただけないでしょうか(>_<)

  • C言語のポインタ

    あまり意識せずにポインタを使っているせいか,次のプログラムではまってしまいました. #include<stdio.h> #include<stdlib.h> int main(void) {  int *p, q;  p = (int *)malloc(sizeof(int));  q = (int *)malloc(sizeof(int));  *p = 2;  printf("%d\n", *p);  return 0; } コンパイルエラーで実行ファイルが出力されません. このプログラムで変数qはなぜポインタじゃないのでしょうか? 次にtypedefでptr_intという型を定義したプログラムは, 上のようなエラーが出力されず,期待とおりの結果になりました. #include<stdio.h> #include<stdlib.h> typedef int* ptr_int; int main(void) {  ptr_int p, q;  p = (int *)malloc(sizeof(int));  q = (int *)malloc(sizeof(int));  *p = 2;  *q = 3;  printf("%d\n", *p);  printf("%d\n", *q); return 0; } typedefすることでなぜエラーを回避することができるのでしょうか? よろしくおねがいします.

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }