私の知る限り、これはあなたの意図です:
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 はエラーです。