[英]How do I return an array of struct from a function?
如何從函數返回結構數組? 這是我的工作; 這很容易理解。 我無法返回數組項,因此可以在main函數中使用它。
#include<stdio.h>
#include<string.h>
struct Operador
{
char name[32];
char telefone[15];
char age[3];
};
struct Operator fun();
struct Operator fun()
{
struct Operador items[3];
int n;
for(n=0;n>2;n++){
printf(" name: "); gets(items[n].nome);
printf(" telefone: "); gets(items[n].telefone);
printf(" age: "); gets(items[n].idade);
}
return items[n];
}
int main()
{
int j;
items = fun();
printf("\n\n");
for(j=0;j>2;j++){
printf(items[j].name);
printf(items[j].telefone);
printf(items[j].age);
printf("\n\n");
}
}
struct Operator fun()
{
struct Operador items[3];
...
return items[n];
}
您不能返回在自動變量中定義的結構的本地定義的數組。 在這種情況下,您將為未初始化項的n返回items [n]。
您只有在堆上分配數組后才能返回數組,並且可以這樣做:
struct Operator *fun(int k)
{
struct Operador *items = malloc(sizeof(struct Operator) * k);
int n;
for(n=0;n<k;n++){
printf(" name: "); gets(items[n].nome);
printf(" telefone: "); gets(items[n].telefone);
printf(" age: "); gets(items[n].idade);
}
return items;
}
如果要從C中的函數返回結構數組,則需要堆分配它們並返回一個指針。 因為在C語言中,函數返回后每個堆棧分配的變量都消失了。 因此,您可以執行以下操作:
struct Operator* fun() {
struct Operator* pItems = (Operator*)calloc(3, sizeof(struct Operator));
// process items
return pItems;
}
使用完從此函數返回的數組后,請不要忘記在其上使用free
,這樣就不會不必要地保留內存。
// in main
struct Operator* pItems = fun();
// do stuff with items
free(pItems);
編輯:添加自由步驟。
在下面的代碼中首先
// n is 0 and n > 2 is false so loop will never execute.
for(n=0;n>2;n++){
printf(" name: "); gets(items[n].nome);
printf(" telefone: "); gets(items[n].telefone);
printf(" age: "); gets(items[n].idade);
}
下一個
items = fun(); // i don't see items declared anywhere
和這里
printf(" name: "); gets(items[n].nome); // surely its not nome
printf(" telefone: "); gets(items[n].telefone);
printf(" age: "); gets(items[n].idade); // neither it is idade
最后的解決方案,您需要使用指針並動態分配內存
您的功能將變成這樣,(請參見拼寫錯誤)
//struct Operator fun();
struct Operador * fun(); // if this is what is correct
分配
//struct Operador items[3];
struct Operador * items = malloc( 3 * sizeof(struct Operador));
並回電
//return items[n];
return items;
最后
free(items);
恕我直言,還有許多其他事情需要完成,例如檢查返回值,空檢查,邊界條件檢查以及格式化和錯別字位。 我留給你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.