【问题标题】:Can we pass structure member this way?我们可以这样传递结构成员吗?
【发布时间】:2013-02-23 17:57:02
【问题描述】:

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

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

【问题讨论】:

  • 回答完 161 个问题后,您至少应该在格式化代码方面付出最少的努力。
  • Ya Mat 但它只是我在这里写的伪代码。
  • 这不是发布不可读的 blob 的借口。对将阅读您的帖子的人表示尊重。
  • 非常感谢您,Mat 和这里的人,我真的不擅长格式化,还在学习阶段。

标签: c arrays pointers structure


【解决方案1】:

您的代码无效:

struct stu *ptr;

ptr->argv[0]=2;

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

【讨论】:

  • 我现在已经编辑了代码。 //第二个参数是我们传递数组 argv 的成员吗??
  • 你为什么不更好地格式化你的代码。换行过多,没有缩进。
【解决方案2】:

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。此外,如果您确实声明了一个静态结构 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 是一个错误。

【讨论】:

  • 谢谢乔纳森,我想知道的是,这里 fun(2,(**)ptr) 在第二个参数中我们传递数组输入的成员吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多