繁体   English   中英

从包含C中的静态数组的函数返回结构

[英]Return a struct from a function containg a static array in C

struct MyStruct
{
  int i; 
  double arr[10];

};


struct MyStruct func()
{


};

从函数返回时,会完全复制到局部变量吗?

struct Mystruct ms = func();

是的,你可以,结构将被完全复制。

是的,如果func()返回一个Mystruct类型的变量。

正确的方法:

void func(struct MyStruct* by_ref);

int main()
    {
      struct MyStruct ms;
      func(&ms);
    }

这不会在堆栈上上传一个夸张的结构,也不会遇到静态变量的问题。 返回指向静态变量的指针非常糟糕,原因如下:

  1. 它破坏了私人的封锁。 程序设计非常糟糕。
  2. 执行此操作的多线程程序容易受到攻击。
  3. 纯错误,如下例所示:
 static uint8 static_str[6]; uint8* func(const uint8 str[6]) { uint8 i; for(i=0; i<6; i++) { static_str[i] = str[i]; } return static_str; } int main() { print_strings(func(“hello”), func(“world”)); } 

打印两个字符串的函数的输出将是“hello hello”或“world world”(取决于函数参数的评估顺序)。

您没有返回值,因此在任何情况下您都需要设置它。 此外,最好使用指针:

struct MyStruct* func()
{
     struct MyStruct *pMyStruct=calloc(1,sizeof(struct MyStruct));

     /* fill struct */


     return pMyStruct; 
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM