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