通过引用通过C中的多个函数传递结构

时间:2018-04-03 18:45:59

标签: c

我试图通过多个函数通过引用传递结构,但是当我尝试在每个函数中打印结构的值时,我得到了垃圾值。如何通过引用正确传递它,以便将值传递回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 个答案:

答案 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;
}