1

systemシェルhello worldコマンドのこの単純なC呼び出しが機能しない理由を誰か教えてください:

MWE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main( int argc, char *argv[] )
{
   char *str;

   str = strdup ( "hello" );
   printf ( "echo %s\n", str );
   system ( ( "echo %s\n", str ) );

   return 0;
}

出力:

こんにちはエコー

sh: 1: こんにちは: 見つかりません

4

3 に答える 3

6

これはあなたが思っていることをしません:

   system ( ( "echo %s\n", str ) );

コンマ演算子は、単純に 2 番目の値、strつまり を返します"hello"。したがって、プログラムは実行しようとせずecho hellohello.

sprintfコマンド全体をバッファに書き込み、それを実行するために使用します。

于 2013-11-06T20:46:08.093 に答える
1

ヒント:

  • system()(または を含む文字列リテラル%) のような % 置換は行いませんprintf
  • 二重括弧は、コンマを、2 つの引数ではなく、右側の引数 ( ) を生成するコンマ演算子にしstrます。CはPythonではありません:-)
于 2013-11-06T20:46:04.980 に答える