我试图通过多个函数通过引用传递结构,但是当我尝试在每个函数中打印结构的值时,我得到了垃圾值。如何通过引用正确传递它,以便将值传递回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;
}
答案 0 :(得分:1)
如果您的代码没有太多更改,我在此处修复了两件事。
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;
}