[英]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.