Cのプログラムで他の実行ファイルを使用する方法

このQ&Aのポイント
  • Cのプログラム中で他の実行ファイルを使用する方法を教えてください。他の実行ファイルのソースファイルはありません。
  • 例えば、aとbの二つの整数を渡して足し算する実行形式のファイルPlus.exeがあった場合、CのプログラムでそのPlus.exeを使用して和Cを計算する方法を教えてください。
  • 具体的には、test.cというプログラム中でPlus.exeを使用して、aとbの和Cを計算する処理を行いたいです。
回答を見る
  • ベストアンサー

初歩的な質問ですが教えてください。

Cのあるプログラム中で、“他の実行ファイル”を用いた処理を行なう方法を 教えていただけないでしょうか。ただし、“他の実行ファイル”のソースファイルはありません。 例えば、aとbの二つの整数を渡して足し算する実行形式のファイルPlus.exeがあったとき、あるプログラム“test.c”の中で“Plus.exe”を用いて aとbの和Cを計算する方法を教えてください。 #include <stdio.h> int main(int argc, char *argv[]) { int a, b, c; a=atoi(argv[1]); b=atoi(argv[2]);   /* ここで c = a+b の計算をPlus.exeで行ないたいのですが・・・ */ printf("sum = %d\n", c); }

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

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.5

char s[64]; sprintf(s, "%s", "plus"); を行うと、sの内容(char型配列の内容)が"plus"となる点はOKですね? そうしておいて system(s); を行うと、これは system("plus"); と同じ結果になります。

peroncho
質問者

お礼

なるほど! 良くわかりました。 教育的なご回答ありがとうございました。 sprintf関数は出力ファイル名をつける時に使用していたのですが、 このような使い方ができるとは、、、目から鱗です(@_@;) おかげさまでsystem関数のことも少し知ることができました。 ありがとうございました。

その他の回答 (4)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

sprintf関数の使い方は調べてみたでしょうか。 そのうち、どの部分が分かって、どの部分が分からなかったでしょうか。

peroncho
質問者

補足

> sprintf関数の使い方は調べてみたでしょうか。 調べてみました。 charの配列sに、文字を代入する関数だと理解したのですが・・・ char s[64]; sprintf(s,"%s",argv[1]); こんな感じでしょうか。 system関数の中で、このsをどのように使うのかが 全くわからないのですが・・・

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

printf関数の親戚筋にあたる、sprintfという関数があります。その使い方をライブラリリファレンスで調べてみてください。 ※これが唯一の方法ではありません。いろんな方法のうちの1つです。

peroncho
質問者

補足

c = system("plus %d %d",a,b); とか試しているのですが・・・だめです! 素人なもので全くわかりません。 教えてください。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

a=111, b=222のとき、system("plus 111 222")を実行したいとしましょう。 system関数に渡しているのは文字列ですよね。上の例では"plus 111 222"です。 さて、a=111, b=222のとき、"plus 111 222"のような文字列を作成するにはどうしたらいいでしょうか。 (まずはヒントだけにしておきます。)

peroncho
質問者

補足

いろいろ試しているのですが・・・ 思いつくもの試してみましたがだめでした。 ギブアップです(@_@;)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

Cの標準ライブラリ関数を使用するとすれば、system関数を使用します。 main関数が最後に値を返しますが、その値がプログラムの「終了コード」とか「終了ステータス値」とか呼ばれる値になります。 この値を使う機会はあまり多くないのですが、system関数がその少ない機会の1つです。system関数を使ってあるプログラムを実行すると、system関数がその終了コードを返します。(正確にはちょっと異なる点もあるのですが、だいたいこんな理解で大丈夫でしょう。) system関数の使い方は、ライブラリリファレンスがあると思うので、そちらを参照してください。その上で使い方が分からなければ、どこまで分かって何が分からないのか補足してください。

peroncho
質問者

お礼

さっそく御回答いただきありがとうございました。<(_ _)>

peroncho
質問者

補足

system関数は初めて知りました(^^ゞ とても便利ですね。 1つわからないのが、引数の渡し方です。 例えば、以下のように使用する場合、 2と1の部分を変数にしたいのですがどのようにしたら良いのでしょうか? system("plus 2 1");

関連するQ&A

  • ソースプログラムのエラー

    自分で四則演算のプログラムを組んだのですが エラーが出てお手上げ状態です。 どこが間違っているのかどなたか教えていただけませんか?? ちなみに足し算の場合はいくつ足しても計算できるという プログラムです☆ #include<stdio.h> int main(int argc, char *argv[]){ int i,a=0,b=0,x=0; int m=0; if(argv[1]!="+"||argv[1]!="-"||argv[1]!="*"||argv[1]!="/"||){ printf("指定された文字ではありませんよ\n"); return -1; } a = atoi(argv[2]); b = atoi(argv[3]); if(argv[1]=="-"){ m=a-b; } if(argv[1]=="*"){ m=a*b; } if(argv[1]=="/"){ m=a/b; } if(argv[1]=="+"){ for(i=2;i<argc;i++){ x=atoi(argv[i]); m+=x; } printf("%d\n",m); return 0; }

  • 全くわかりません。

    C言語の課題が全くわかりません。 (1)~(5)には何が入りますか? 丸投げですいません。後でじっくり考えます。 お願いします。 コマンド行引数に整数と符号(+、ー)を指定し、 その和を表示するプログラム。 例%calc -5+10+100-10=95と表示するプログラム #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { int sum=0,i=1; if(argc(1)1) put("komanasi"); else if(argv[i],(2)=='+'){ i++; sum += atoi(argv[i(3)]); }else if (argv[i],(2)=='-'){ i++; sum-=atoi(argv[i(3)]); }else sum+=atoi(argv[i(3)]); while((4)<(5)){ if(argv[i],(2)=='+'){ i++; sum+=atoi(argv[i(3)]); }else{ i++; sum-=atoi(argv[i(3)]); } } printf("%d\n",sum); return(0); }

  • 四則演算プログラム

    2つの数字を四則演算するプログラムを作ろうと 思っているんですが、 (1)関数atoiを使う、 (2)int main(int argc, char +argv[])と  宣言する、 (3)足し算の場合のみ、2つ以上の数字を計算できる ということが条件なんですけど、どなたか プログラムがどのようなものか教えていただけ ませんか??

  • プログラミング(argcとargv)

    入力された数の合計とその計算式を表示するプログラムをつくっています。惜しい(?)ところまでいったのですがその先がなかなか進みません。以下のプログラムのどこを修正したらよいでしょうか?教えてください。 #include <stdio.h> #include <stdlib.h> #define nMAX 10 int main(int argc, char **argv){ int sum = 0; if(argc < 2){ printf("Too few option!\n"); return 1; } int i, n; for(i = 1; i < argc; i++){ n = atoi(argv[i]); sum = sum + n; } printf("%d\n", sum); }

  • C言語:四則演算プログラムで、数字以外の文字が入力された場合のエラー処理について

    お世話になります。 int main( int argc, char *argv[] ) { 上記で、例えばコマンドラインで「実行ファイル名 10 + 20」と入力すると 10+20を計算する、というような四則演算プログラムを作っております。 int num1, num2; num1 = atoi( argv[1] ); num2 = atoi( argv[3] ); 上記の例でしたら、num1、num2 に「10」、「20」の整数値が入りますが、 「数字以外の文字が入力された場合」のエラー処理に悩んでいます。 例えば上記の例で、 「実行ファイル名 a + 20」 「実行ファイル名 a10 + 20」 などと入力された場合、 num1 = atoi( argv[1] ); で、atoi関数が「0」を返すので、 num1に整数の0が入りますよね。 そこで最初、num1 = atoi( argv[1] ); に「整数の0」が入った場合 エラーを出して終了、と云う形にしようと考えました。 ただ、これでは「0+20」などと入力した場合もエラーになってしまうので、 if文を用いて、 「argv[1][0]の値が、'0'という文字列ではない場合に」 「num1 = atoi( argv[1] )」で「num1に整数の0が入ったら」「エラー」 という形で考えました。 しかしこの場合、 「実行ファイル名 100abc + 20」 などと入力されると、atoi関数が「100」を返してくるので 「100+20」が実行結果として出てきてしまいます。 「100abc」の「abc」部分を、どのように判断すれば宜しいのでしょうか。 四則演算プログラムとしての全体は何とか出来上りましたが、 このエラー処理で行き詰まりました。 頑張って検索してみたのですが、Cを始めてまだ2週間程度でして、 上手い方法がどうしても思い浮かびません。 どのような方法でエラー処理を行えば宜しいのでしょうか・・・ 補足要求、質問の意味が判らない、等ございましたらご指摘お願いします。 宜しくお願い致します。

  • コマンドラインから引数を渡したいのですが・・・

    VC.NETで参考書に載っていた下のようなコードを書きました。 #include <iostream> #include <cstdlib> using namespace std; int main (int argc, char *argv[]) { int sum; if (argc != 3) { cout << "引数の個数が違います。"; return 1; } sum = atoi (argv[1]) + atoi (argv[2]); cout << "合計=" << sum << '\n'; return 0; } しかしながら、引数の個数が違います。としか出力されません。どうすればよろしいでしょうか?

  • main( )

    次の様なプログラムを作りました。 Dosプロンプトを開き、コンパイルで出来た、exeファイルのアドレスを渡しました。 例えば、2と3を引数として渡す時、 2 スペースを押す、 3 enter  の順に行うと、エラーになります。 どの様に、引数を渡すのか操作方法を教えてください。 お願いします。 #include<stdlib.h> #include<stdio.h> int main(int argc, char *argv[]) {    if(argc!=3){     printf("2つの数を指定してください。");     exit(1);    }     printf("%f",atoi(argv[1])+atoi(argv[2]));    return 0; }

  • C言語でコマンドラインの引数について。

    コマンドラインで引数をわたす基本的なプログラムは main(int argc,char *argv[]){....] ですよね。 今回実行時に、 >実行ファイル名 123 + 233 といれたら、123+233を計算してくれるプログラムを作ろうとしています。 その場合、main(int argc,int *argv[]){} としたら、argv[1]に123が入って、argv[2]に+が入って、argv[3]に233が、入るというわけではないんでしょうか? とりあえず、確認で #include<stdio.h> main(int argc,int *argv[]) { printf("%d\n%d\n",argv[1],argv[3]); } としてみたんですが、実行結果は、とても長い数字がでてきてきました。 なにがいけないのか教えてください。 お願いします。 あとWindows MEでVC++6を使ってます。

  • C言語で分からないところがあるのですが・・・

    すみません。C言語で分からないところがあったので来ました。 ユーザから数字を任意の数だけ受け取って、その数字とその和を表示するプログラムです。atoiなる関数、そしてコマンドライン引数というのを使って考えてみた結果を下に書きましたので、どなたか修正してください。お願いします。 実行結果(のイメージ図) 20 39 4 sum 20 39 4 63 途中までのソースコードです。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char *argv[]) { int sum; int n,i; printf("How many numbers INPUT?: "); scanf("%d", &n); for(i = 0; i <= n; i++){ atoi(argv[i]); } sum = printf("%d",sum); return 0; }

  • コマンドラインのオプションの読み取り

    C++で、引数に/オプションで処理ごとに実行するプログラムを書きたいのですが、具体的にmain関数でどう書けばよいのでしょうか? スマートの方法が知りたいです。 sample.exe /test=1 aの関数を実行 sample.exe /test=2 bの関数を実行 sample.exe /test=3 cの関数を実行 int main(int argc, char**argv) { ... ここの処理? } void a(){ print "A\n"; } void b(){ print "B\n"; } void c(){ print "C\n"; }

専門家に質問してみよう