0

私はそのメンバーのポインタの配列を持つ以下の構造を持っています

char input[128];

struct Stu

{

char *argv[];

int a;

};

struct stu *ptr=&stu;

ptr->argv[0]="name";

ptr->argv[1]=input;

fun(2,(**)ptr);     //is 2nd argument are we passing member of array input[128] ??

fun(int argc,char *argv[]){}  

fun から渡された 2 番目の引数を char*argv[] に格納するにはどうすればよいですか?

4

2 に答える 2

2

あなたのコードは無効です:

struct stu *ptr;

ptr->argv[0]=2;

構造体へのポインターがあります....しかし、どこにも割り当てられた構造体がありません。あなたは誰が何を知っているかを指摘しています。

于 2013-02-23T18:03:54.017 に答える
0

私の知る限り、これはあなたの意図です:

struct stu
{
    char **argv;    // *argv[] will give you "error: flexible array member not at end of struct"
    int a;
};

struct stu Stu;    // Allocate Stu as a global stu struct

fun(int argc, char * argv[]) {}

int main()
{
    char input[128];
    char *argies[2];        // Static allocation of space for argv to point to
    struct stu *ptr = &Stu;

    ptr->argv = argies;     // You need to assign argv to point to allocated space

    ptr->argv[0] = "name";
    ptr->argv[1] = input;

    fun(2, ptr->argv);    // is 2nd argument we passing member of array argv??
}

実際の stu 構造体を宣言しない場合、ptr はゼロに初期化されます。また、静的構造体 stu (上記の Stu) を宣言しても argv ポインターを初期化しない場合、argv ポインターはゼロに初期化されます。「誰がどこを知っているか」ではなく、非常に具体的な場所を指しています。

入力は NULL 終了ではなく、実際には初期化されていないことに注意してください。ほとんどのプログラマーは、任意の char **argv が NULL 終了 C 文字列を保持していると想定する可能性があるため、変数名 "argv" は誤解を招く可能性があります。また、argy の次元を 3 にして、3 番目の位置に NULL を入れたいと思うでしょう。

ptr->argv[0] (文字列「名前」) を *(ptr->argv) として渡すことができますが、fun プロトタイプは fun(int argc, char * argv) でなければなりません。

**ptr->argv は char です。

*ptr は構造体 stu です。

**ptr はエラーです。

于 2013-02-23T18:25:33.080 に答える