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 传递的第二个参数如何存储在 char*argv[] 中?

4

2 回答 2

2

您的代码无效:

struct stu *ptr;

ptr->argv[0]=2;

您有一个指向结构的指针....但是您没有在任何地方分配结构。你在指出谁知道什么。

于 2013-02-23T18:03:54.017 回答
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 将被初始化为零。此外,如果您确实声明了一个静态结构 stu(上面的 Stu)但不初始化 argv 指针,则 argv 指针将被初始化为零。不是指向“谁知道在哪里”,而是指向一个非常具体的地方。

请注意,输入不是以 NULL 结尾的,实际上它没有被初始化,因此变量名称“argv”可能会产生误导,因为大多数程序员可能会假设任何 char **argv 都包含以 NULL 结尾的 C 字符串。此外,您可能希望将 argies 的维度设为 3,并将 NULL 放在第三个位置。

您可以将 ptr->argv[0](字符串“名称”)作为 *(ptr->argv) 传递,但有趣的原型必须是 fun(int argc, char * argv)。

**ptr->argv 是一个字符。

*ptr 是一个结构体。

**ptr 是一个错误。

于 2013-02-23T18:25:33.080 回答