无法打印结构

标签 c printing 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);

关于无法打印结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27879842/

相关文章:

c - 在多个文件中使用结构

c - 递归 - 数据结构类(class) - 打印所有可能的系列

c - 最长的字符串

c++ - C/C++ 中最快/最短的方法来计算二进制数字之和/又称二进制中 1 的数量

python - 删除 Python 中变量和字符串之间的空格

c - 附加到链表的元素在附加后似乎发生了变化

c - 如何通过 C 更改默认网关

css - 是否可以打印您网页上显示的 YouTube 视频静态截图?

printing - 如何使用动态输入生成打印表单

在 C 中将 char 转换为 unsigned Short