我有一个下面给出的结构,它的指针数组是其成员
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中传递的第二个参数存储在char * argv []?
中答案 0 :(得分:2)
您的代码无效:
struct stu *ptr;
ptr->argv[0]=2;
你有一个指向结构的指针....但你没有在任何地方分配一个结构。你指的是谁知道什么。
答案 1 :(得分:0)
AFAIK这就是你想要的:
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将被初始化为zero。另外,如果你确实声明了一个静态struct stu(上面的Stu)但是没有初始化argv指针,那么argv指针将被初始化为零。没有指出“谁知道在哪里”,而是指向一个非常具体的地方。
请注意,输入不是NULL终止,实际上它没有被初始化,因此变量名“argv”可能会产生误导,因为大多数程序员可能会认为任何char ** argv都包含NULL终止的C字符串。此外,您可能希望将argies维度设置为3并将NULL置于第三位置。
您可以将ptr-&gt; argv [0](字符串“name”)作为*(ptr-&gt; argv)传递,但有趣的原型必须很有趣(int argc,char * argv)。< / p>
** ptr-&gt; argv是一个字符。
* ptr是一个struct stu。
** ptr是一个错误。