mainの上のいくつかの構造を次のように定義しました。
struct arguments
{
int c;
char *v[];
};
今、私はこれをメインでやりたいです:
int main(int argc, char *argv[])
{
arguments arg;
arg.c = argc;
arg.v = argv; /* error: incompatible types in assignment of 'char** to char* [0]' */
}
だから、私は自分が何をしているのか完全には理解していませんが、本能的に線char *v[];
が代わりになるように構造を作り直しましたchar **v[];
が、これは、参照を参照して構造を渡すときに、arg
逆参照しての値を取得したい場合を意味しarg.v[0]
ます。プログラム名、私は今やらなければなりません*arg.v[0]
、そしてこれはもはやのために働きません*arg.v[1]
。
私は次のような機能を持っています:
void argument_reader(arguments &arg)
{
cout << "Number of arguments: " << arg.c << endl << endl;
cout << "Array\t\tValue\n";
cout_bar(40);
for (int i = 0; i < arg.c; i++)
{
cout << "argv[" << i << "]\t\t" << *arg.v[i] << endl;
}
return;
}
しかし、私が呼び出すと*arg.v[i]
、プログラムは2番目の引数の値やその他の値を出力せずに終了します。
だから私の質問は、私が意図したように(のアドレスを格納するために)メインワークarg.v[some_index < arg.c]
の行を何らかの方法で作成することによって別の関数内で呼び出すことができるように、構造体を使用して関数間を渡すことができる方法はありますか?arg.v = argv
argv
arg.v
構造体が行うのは、次のようなデクレレーションを持つ関数に渡す代わりにargc
、argv
次のように宣言された関数void func(int &argc, char *argv[]);
に変数名を持つ新しい構造体タイプを渡すことができるようにすることだけです。 。したがって、これができない場合は、最初の方法に戻ることができます。arg
void func(arguments &arg)