簡體   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