1

重複の可能性:
コマンド ラインから C プログラムに引数を渡す

ターミナルからreplaceという関数に3つの引数を渡そうとしています。端末から次のことができるかどうか知りたい

  % ./replace d DDD mytest.tx

私はオンラインで調べましたが、内部の関数ではなく、値を main() に直接渡すことに関する情報しか見つかりません。

編集: 主な機能を次のように編集しました。

void replace(char* string_a, char* string_b, char* string_f)
 {
  }

int main(int argc, char *argv[])
  { 
       if(argc < 4)
  { 
    printf("Not enough arguments\n");
   return 0;
  }

replace(argv[1],argv[2],argv[3]);
 }
4

6 に答える 6

5

メイン関数は次の形式にする必要があります。

int main ( int argc, char *argv[] )

argv は引数へのポインタです。最初の引数はプログラムの名前であることに注意してください。

コマンドライン引数の レッスンは次のとおりです。

于 2012-09-25T14:45:09.077 に答える
2

もちろん、メインのプロトタイプはint main(int ac, char **av)、ac がプログラムに渡される引数の数であり、char** がプログラムに渡される引数を含む配列の配列です。

たとえば、コードの場合:

int main(int ac, char **av)
     {
      void replace (av[1], av[2], av[3])
        { 
         .......
        }

     }

exec を : として起動すると./replace d DDD mytest.tx、av[0] はプログラム名になり、av[1] はd、av[2]DDDおよび av[3]になります。mytest.tx

幸運を !

于 2012-09-25T14:48:10.447 に答える
1

すべてのスタンドアロンの適切な C プログラムは、 で実行を開始しmain()ます。それが言語の仕組みです。

したがって、引数を確認して解釈した後、replace()fromを呼び出す必要があります。main()コマンドライン引数は、 への標準int argc, char *argv[]パラメータになりmain()ます。

于 2012-09-25T14:46:51.163 に答える
1

やりたいことは、mainの引数リストを使用することです。

次の署名を使用できます。

int main(int argc, char* argv[])argv は、コマンド ラインから渡された引数リストへのポインターです。

于 2012-09-25T14:46:51.290 に答える
1

見上げargcargv.

argc は引数の数であり、argv は引数へのポインターの配列です。

したがって、コードは次のようになります。

void replace (char string_a[],char string_b[], char string_f[])
{
    //...
}

int main(int argc, char *argv[])
{
    if(argc < 4)
    {
        printf("Not enough arguments\n");
        return 0;
    }

    replace(argv[1], argv[2], argv[3]);
}

argv[0]また、argv ( ) の最初の項目は、実行中のプログラムのパスであることも覚えておいてください。

于 2012-09-25T14:49:41.973 に答える
1

正確な質問に答えるには: I am trying to pass three arguments from terminal into a function called replace.いいえ、引数を main に送信することをバイパスすることはできません。

C 言語は、プログラムへのエントリ ポイントを探すように定義されており、main()エントリ ポイントがない場合は文句を言います。が存在すると予想されるためmain()、コマンドライン引数のエントリ ポイントとして使用されます。

[void | int] main(int argc, char *argv[]) 

argcコマンド ライン引数の数でargv[]、文字ポインタの配列です (引数リストの「文字列」バージョン)。

置換するためにそれらを渡したい場合は、実際にそれらを直接送信する必要があります。

int main(int argc, char *argv[]){
  if argc is big enough to satisfy
     replace(argv's)

引数について本当に知りたくない場合はmain()、引数をファイルに保存するか、実行時に関数から取得する必要がありstdinますreplace()

メイン関数を「置換」しようとしている場合は、リンカーでエントリ ポイントを定義できる場合に可能です。

繰り返しますが、あなたの目標がここにあるのかよくわかりません。

于 2012-09-25T15:08:10.717 に答える