gpt4 book ai didi

c - 如何访问作为指针传递给函数的结构中定义的指针变量?

转载 作者:行者123 更新时间:2023-11-30 16:13:57 24 4
gpt4 key购买 nike

我正在将一个结构传递给一个函数。该结构体包含一个指针变量。该结构本身作为指针变量传递给函数。我无法使用访问数组的下标样式(var[0])来访问结构体的指针变量成员(在函数内部)。代码可以编译,但在执行 .o 文件时出现段错误。错误出在函数代码的第一行。我无法访问结构内的指针变量。

当不涉及函数时,我可以使用点运算符轻松访问该指针变量。例如,请参阅最后的工作代码。

有问题的代码:

#include<stdio.h>

struct prog
{
double* var;
char* name;
int arr[];
};

typedef struct prog p;

void fun(p *inp);

int main()
{
p in;

p *inptr = &in;

in.arr[1] = 32;

fun(inptr);


printf("Value var is: %f\n", in.var[0]);
printf("Value arr[0] is: %d\n", in.arr[0]);
printf("Value arr[1] is: %d\n", in.arr[1]);
printf("Name of prog is: %s\n", in.name);
return 0;
}

//Function
void fun(p *inp)
{
(*inp).var[0] = 4.5;
//inp->var[0] = 4.5;
inp->arr[0] = 11;
inp->arr[1] = 55;
inp->name = "User";
}

工作代码:

#include<stdio.h>

struct prog
{
double* var;
char* name;
int arr[];
};

void main()
{
struct prog p;
p.var[0] = 3.7;
p.name = "User";
p.arr[0] = 100;
p.arr[1] = 30;

printf("Value var is: %f\n", p.var[0]);
printf("size of prog is: %d bytes \n", sizeof(p));
printf("Value at arr[0] is: %d\n", p.arr[0]);
printf("Value at arr[1] is: %d\n", p.arr[1]);
printf("Name of prog is: %s\n", p.name);
}

运行“gdb”显示“程序收到信号 SIGSEGV,段错误。0x00005555555551d3 in fun (in=0x7fffffffe200) at strct-fun.c:3535 (*inp).var[0] = 4.5;"

最佳答案

in.arr[1] = 32;

你不能使用静态内存来做到这一点,如果你想要一个灵活的数组成员,你需要malloc:

p *in = malloc(sizeof *in + sizeof(int) * number_of_arr_elements);

请注意,灵活数组仅适用于最后一个成员。

您也需要为其他成员提供空间:varname:

p->var = malloc(sizeof(double) * number_of_var_elements);
p->name = malloc(max_length_of_name + 1); /* +1 for the trailing \0 */

关于c - 如何访问作为指针传递给函数的结构中定义的指针变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850666/

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