繁体   English   中英

无法打印struct

[英]Can't print struct

我正在尝试打印一个名为Task的结构的成员,但它只打印第一个成员,然后它给我一个分段错误。 有人能帮帮我吗?

这是我的代码:

void listartarefas(Task *ff)
{
 int i;
 for(i=0;i<=1;i++)
   {
    if(ff[i].tipo == 1)
      { 
        printf("Agendada:\n");
        printf("%d\n",ff[i].identf);
        printf("%s\n",(ff[i].path));
        printf("%d-%d-%d\n",(ff[i].ano),(ff[i].mes),(ff[i].dia));
        printf("%d:%d:%d\n",(ff[i].hora),(ff[i].minuto),(ff[i].segundo));
       }
    else
       {
        printf("Executada:\n");
        printf("%d\n",ff[i].identf);
        printf("%s\n",(ff[i].path));
        printf("%d-%d-%d\n",(ff[i].ano),(ff[i].mes),(ff[i].dia));
        printf("%d:%d:%d\n",(ff[i].hora),(ff[i].minuto),(ff[i].segundo));
        }  
   }
}

int main()
{
 Task tf={2,1,"home/fsm/mieti/projB/Makefile",17,20,00,1,5,22};
 Task tt={3,0,"home/fsm/mieti/projB/Makefile",17,22,34,1,4,44};

 Task *ff[]={&tf,&tt};

 listartarefas(*ff);
 return 0;
 }

因为您没有将指向数组的指针传递给listartarefas函数。 相反,你取消引用数组,它只给你第一个元素,它是一个指向单个结构的指针,你像它一样循环,导致[ 未定义的行为 }( http://en.wikipedia.org/wiki/ Undefined_behavior )。

你的代码中有一些奇怪的东西,比如你有一个指针数组,而不仅仅是一个结构数组,这意味着你要么必须改变你的函数来接受一个指针数组,要么改变一个数组中的数组指向结构数组的指针。

我的建议是使用一个结构数组,并按原样传递它,因为数组自然地衰减到指针。 所以,例如

Task ff[] = {
    {2,1,"home/fsm/mieti/projB/Makefile",17,20,00,1,5,22},
    {3,0,"home/fsm/mieti/projB/Makefile",17,22,34,1,4,44}
};

listartarefas(ff);
 listartarefas(*ff);

所以这个电话相当于

listartarefas(ff[0]);

现在你传递的是数组ff的第一个元素,它是结构的指针。 在该函数中,您尝试访问ff[1]以便看到崩溃。

您可以像建议的@Joachim那样做

问题出在这里

listartarefas(*ff);

您正在传递* ff []的间接,这是您要传递的数组的第一个元素。 您可能想要这样做:

void listartarefas(Task **ff)
{
 int i;
 for(i=0;i<=1;i++)
   {
    if(ff[i]->tipo == 1)
      {
        printf("Agendada:\n");
        printf("%d\n",ff[i]->identf);
        printf("%s\n",(ff[i]->path));
        printf("%d-%d-%d\n",(ff[i]->ano),(ff[i]->mes),(ff[i]->dia));
        printf("%d:%d:%d\n",(ff[i]->hora),(ff[i]->minuto),(ff[i]->segundo));
       }
    else
       {
        printf("Executada:\n");
        printf("%d\n",ff[i]->identf);
        printf("%s\n",(ff[i]->path));
        printf("%d-%d-%d\n",(ff[i]->ano),(ff[i]->mes),(ff[i]->dia));
        printf("%d:%d:%d\n",(ff[i]->hora),(ff[i]->minuto),(ff[i]->segundo));
        }
   }
}

int main()
{
    Task tf={2,1,"home/fsm/mieti/projB/Makefile",17,20,00,1,5,22};
    Task tt={3,0,"home/fsm/mieti/projB/Makefile",17,22,34,1,4,44};

    Task *ff[]={&tf,&tt};

    listartarefas(ff);
    return 0;
}

暂无
暂无

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

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