【问题标题】:returning a struct type返回结构类型
【发布时间】:2016-04-21 07:39:56
【问题描述】:
struct name_strucutre()
{
    char cName[] = "hello";
    int iCode, i = 0;
    struct sign_in items[6];//array of six structure variables

    Fpointin=fopen("namepass.txt","r");

    if (Fpointin == NULL)
    {
        printf ("File does not exist.\n");
    }
    else
    {
        for (i=0;i<6;i++)
        {
            fscanf(Fpointin,"%42s %d",items[i].name, &items[i].password);//read all values from the file into th structure
        }
        printf("Here is the sign_in structure\n");//print the entirety of the sign_in structure
        for (i=0;i<6;i++)
        {
            printf("name: %s\ncode: %d\n\n", items[i].name, items[i].password);
        }
    }
    fclose(Fpointin);
    return items;
}

这个函数应该返回结构sign_in 这是将结构传回主结构的安全方法吗?我必须将用户输入的值与结构的值进行比较,这是我能想到的唯一方法。

【问题讨论】:

  • 它甚至不应该编译。你不是在声明一个函数,你是在声明一个结构

标签: c struct return


【解决方案1】:

首先,您必须将返回类型定义为struct sign_in 而不仅仅是struct。其次,最好返回指向结构的指针,尤其是在结构数组(不是单个对象)的情况下。

【讨论】:

  • 更好?你的意思是目前的方法在某种程度上是正确的?
  • @SouravGhosh 再次阅读我的回答。 “最好返回指针(而不是结构本身)”。示例中的技术错误是另一回事(阅读“第一”)。
  • 示例中的技术错误是另一回事..真的吗?我们在这里做什么?
  • @SouravGhosh 再次阅读我的答案中的所有单词。没有必要完全引用它!而且 - 你的问题的答案在哪里?说明问题还是发好争吵的cmets比较好。
  • 你还是没明白我的意思,而是忙着捍卫自己的立场。我再说一遍,更好不是你想在那里使用的词。尝试返回局部变量的地址时,代码是(并且将是)完全错误的。如果你仍然不()理解,我会是风... :)
【解决方案2】:
  1. 函数声明应为struct sign_in* name_strucutre()struct sign_in&amp; name_strucutre()

  2. 您不能返回在函数内部发生在 struct sign_in items[6]; 的堆栈上创建的结构。

【讨论】:

  • 如果我只是将它传递给另一个函数而不是返回它呢?
  • 为什么不呢?可以返回自动结构。结构数组是另一回事,但单个元素可以是返回值。
  • 从函数返回分配在堆栈上的结构?那是新事物
  • @EugeneAnisiutkin 不,这真的不是什么新鲜事。这是普通的旧标准 C。
  • @Michael 你提到struct sign_in&amp; 是 C++,因此对于 C 问题来说是完全错误的。这就是我认为您的回答值得投反对票的原因之一。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多