gpt4 book ai didi

c - 在 C 中通过多个函数通过引用传递结构

转载 作者:行者123 更新时间:2023-11-30 14:49:21 25 4
gpt4 key购买 nike

我试图通过多个函数通过引用传递结构,但是当我尝试在每个函数中打印结构的值时,我得到了垃圾值。如何正确地通过引用传递它,以便该值从 func3() -> func2() -> func1()-> main() 函数传回 函数

typedef struct _buf {
void *ptr;
size_t len;
} buf;


int func3(buf *x){
x->ptr = 45;
printf("func3 %s \n", (char *)x->ptr);
return 0;
}

int func2(buf *x){
func3(&* x);
printf("func2 %s \n", (char *)x->ptr);
return 0;
}


int func1(buf *x) {
func2(&*x);
printf("func1 %s \n", (char *)x->ptr);
return 0;
}


int main() {
buf x = {NULL, 0};
func1(&x);
printf("main %s \n", (char *)x.ptr);
return 0;
}

最佳答案

无需对代码进行太多更改,我就在这里修复了两件事。

1) 您正在尝试打印从地址 45 开始的字符串。这是一个问题,显然它会打印垃圾。

2) 您可以按原样向前传递指针。

#include<stdio.h>
typedef struct _buf {
void *ptr;
size_t len;
} buf;


int func3(buf *x){
x->ptr = (void*)"hello";
printf("func3 %s \n", (char *)x->ptr);
return 0;
}

int func2(buf *x){
func3(x);
printf("func2 %s \n", (char *)x->ptr);
return 0;
}


int func1(buf *x) {
func2(x);
printf("func1 %s \n", (char *)x->ptr);
return 0;
}


int main() {
buf x = {NULL, 0};
func1(&x);
printf("main %s \n",(char*) x.ptr);
return 0;
}

关于c - 在 C 中通过多个函数通过引用传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637131/

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