2017-12-05 71 views
-2

私はLinux Mint XFCE 18.2を使用しています。私は文字列の方程式を解決しようとしています(ユーザはGTK_ENTRYにある方程式を入力します)。私は答えを評価するためにシステムシェルに文字列を渡します。ここc()関数のprint 0

は大きすぎる実際のコード:-(私のコードです)

int main() 
{ 
    long g = system("expr 8 + 7"); 
    printf("%ld \n",g); 
} 

私はこれを実行し、これまで私はこの結果を得るとき: - それは、この余分な0からを印刷し

$ ./a.out 
15 
0 

すべての回この0はどこから来たのですか?私は15を印刷したいだけです.G変数に値を割り当てたい

+1

'manシステム'の 'system'の戻り値の意味は何ですか?それが必要ない場合は、 'printf'を削除してください。 –

+0

'system()'を使ってコマンドの出力を得ることはできません。 – larsks

+0

'expr'のドキュメントを読んでください。それは計算された価値と何をしていると言いますか? –

答えて

0

システムリターン: 戻り値はエラー時に-1である(例えば、フォーク(2)が失敗した)、そうでなければコマンドのリターン・ステータス。後者の戻り状況は、wait(2)で指定された形式です。したがって、コマンドの終了コードはWEXITSTATUS(ステータス)になります。/bin/shが実行できない場合、終了ステータスは終了するコマンドの終了ステータスになります(127)。 commandの値がNULLの場合、system()はシェルが使用可能である場合は0以外を返し、そうでない場合は0を返します。

system()は他の子の待機状態に影響しません。私はそれがのを助けることを願ってい

int main() 
{ 
    FILE *in=NULL; 
    char temp[256]; 
    in=popen("expr 8 + 7", "r"); 
    fgets(temp, 255, in); 
    printf("%s", temp); 
    return 0; 
} 

あなたはpopenのを使用することができます。

0

または出力をファイルにリダイレクトします。 systemコールは、与えられたコマンドを実行し、終了ステータスを返します。これはgに格納され、出力されます。 expr 8 + 7がエラーなく実行されたため、終了ステータスはでした。式の結果が表示される理由は、stdoutをコマンドの一部としてリダイレクトしなかったためです。そのため、式の評価がコンソールに表示されます。 コマンドの出力をキャプチャする場合は、いくつかのパイプを開く必要があります。

0

二つの方法:

int main() 
{ 
    long g = system("expr 8 + 7"); 
} 

または

int main() 
{ 
    long g = 8 + 7; 
    printf("%ld \n",g); 
} 

あなたはシェルでコマンドを実行するための十分な理由がない限りsystemを使用するためにC言語でのプログラミング、そのない良いアイデアを使用している場合。 cは直接式を評価できます。

+0

式は文字列形式です –

0
system("expr 8 + 7"); 

上記のステートメントはどのように実行されますか? system()関数はシェル(bash)を内部で呼び出すと、bashはCLIでの動作と同様にexpr 8 + 7を実行します。

[email protected]:~/doubt$ expr 7 + 8 
15 

場合、「そうを(例えば、フォーク(2)失敗した)の戻り値は-1エラーに、およびコマンドの リターン・ステータス」manページからsystem()return値をチェックシェルはsystem()で提供されているコマンドを実行することができます。statusを返します。の場合は0です。したがって、余分なprintfを削除すると、system()はとにかくstdoutバッファに結果を出力します。

exprの結果をいくつかの変数に格納したい場合は、これを行う方法が非常に多いので、system()結果をファイルにリダイレクトすることができます。ここで

は単純なアプローチは、私はそれがのを助けることを願ってい

int main(int argc, char *argv[]) 
{ 
     int fd = open(argv[1],O_RDWR | 0664); 
     if(fd == -1) { 
       perror("open"); 
       return 0; 
     } 

     dup2(3,1);// result of system will redirected into file, from file you can fetch the result and can do whatever you want. 
     system("expr 8 + 7"); 

} 

です。

関連する問題