2011-11-09 15 views
2

これは本当に基本的な質問です。割り当てのために、仮想アドレスのページ番号とオフセット番号を計算するcプログラムを書く必要がありました。私のプログラムは、仮想アドレスの音声変数を計算するときにうまくいくように見えますが、それをどのように渡すのか分かりません。簡単:端末(Mac)からCプログラムにデータを渡す

割り当ては、私たちは、私はちょうど私のMac上で、端末にその19982を渡す方法を見つけ出すことはできません。この

./program_name 19982 

のように私たちのプログラムを実行する必要があることを述べています。どんな助けもありがとうございます。 (そして、誰かがマックジョークをする前に)

+0

ハードコードされた変数を作成するのではなく、プログラムで番号19982を使用して使用する方法を知りたいですか? –

+0

はい、それはまさにそれです。私の端末への入力は 'gcc myprog.c'をコンパイルするには ' /a.out 'を実行します しかし、私は19982をその式にどこに入れるべきかわかりません。私はすでに議論を受け入れるために私のメインを設定しているが、私はそれをターミナルでどうやって渡すのか分からない。 – solllodolllo

答えて

4

argvを探しているようですが、それが何であるかわからないと検索が難しいと思います!これはMac OS Xの端末に固有のものではありません。

argv引数は、文字列の配列です。その要素は個々のコマンドライン引数文字列です。

実行されているプログラムへのパスは、の最初の要素、つまりargv[0]です。

argv内の要素の数はargcに格納されている:

#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    int arg; 
    for (arg = 0; arg < argc; ++arg) 
    { 
     printf("Arg %d is %s\n", arg, argv[arg]); 
    } 
    return 0; 
} 

コンパイル:

% gcc program_name.c -o program_name 

Runintargv[1]変換

% ./program_name 19982 
Arg 0 is ./program_name 
Arg 1 is 19982 

が課題として残されているが。

1

通常、mainには "argv/argc"を使います。例:Linuxでは

#include<stdio.h> 

int 
main (int argc, char *argv[]) 
{ 
    if (argc < 2) 
    printf ("You didn't enter any arguments\n"); 
    else 
    printf ("Your first argument is %s\n", argv[1]); 
    return 0; 
} 

は、コンパイルしたいと、このように実行します:あなたが使用することができます

Your first argument is howdy! 
4

:Linuxで再び

gcc -o hello hello.c 
./hello howdy! 

、それが出力このようなものを希望argcargvは、プログラムの引数にアクセスします。 argcは "arguments count" - 渡された引数の数です。 argvは「引数ベクトル」で、最初のメンバーはプログラムの名前です。

#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char* argv[]) 
{ 
    int Address; 
    if (argc > 1) 
    { 
     Address = atoi(argv[1]); 
    } 
    else 
    { 
     printf("No arguments passed\n"); 
     return 1; 
    } 
    return 0; 
} 
+0

Errr ...文字列をintに変換していませんか? –

+0

もちろん)。一定。 –

1

全てのC(およびC++、Objective-Cのことは知らない)プログラムが機能mainでその実行を開始します。この関数は2つの引数をとります:通常、プログラムに与えられた引数の数のカウンタであるargcという名前の整数。 2番目の関数引数はcharポインタの配列で、通常はargvと呼ばれ、実際のコマンドライン引数です。

argvの最初のエントリがargcは、常に少なくとも1

次のプログラムは、コマンドラインで指定したすべての引数を出力されることを意味し、常にコマンドそのものの名前です:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    printf("Total number of values in argv: %d\n", argc); 
    for (int a = 0; a < argc; a++) 
     printf("argv[%02d]: %s\n", a, argv[a]); 
} 
関連する問題