我们可以这样通过结构成员吗?

时间:2013-02-23 17:57:03

标签: c arrays pointers structure

我有一个下面给出的结构,它的指针数组是其成员

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 []?

2 个答案:

答案 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是一个错误。

相关问题