gpt4 book ai didi

c - 使用结构传输变量

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:35 27 4
gpt4 key购买 nike

我想使用结构传递几个变量。以下是示例程序代码。当我运行这个程序时,出现段错误。我使用 gcc 编译器。

谁能帮我解决这个问题?

struct data{
const char * ip;
const char * address;
const char * name;
};

int fun(struct data *arg) {
//struct data *all;
const char *name = arg->name;
printf("\n My name is:%s",name);
return 1;
}


int main(int argc, char * const argv[]) {
struct data * all;
int k=0;
//data.name = argv[1];

all->name=argv[1];
k = fun(all);

printf("\n k is:%d ",k);

return 0;
}

最佳答案

问题出在这里:

struct data * all;
all->name=argv[1];

您还没有为all 分配内存。当您有一个未初始化的指针时,它指向内存中的随机位置,您可能无法访问这些位置。您有两个选择:

  1. 在栈上分配:

    struct data all;
    all.name=argv[1];
    k = fun(&all);
  2. 在堆上分配:

    struct data *all = malloc(sizeof(*all));
    if (all != NULL)
    {
    all->name=argv[1];
    k = fun(all);
    }
    free(all);

当您知道 all 仅在当前函数(以及您调用的函数)中需要时,第一种情况很好。因此,在堆栈上分配它就足够了。

第二种情况适用于当您在创建它的函数之外需要 all 时,例如当您返回它时。想象一个函数初始化 all 并将它返回给其他人使用。在这种情况下,您不能在堆栈上分配它,因为它会在函数返回后被销毁。

您可以在 this question 中阅读更多相关信息.

关于c - 使用结构传输变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com