[英]How do you return an array of structs from a function in C?
我試圖創建結構和數組fread
到一個輔助函數內部數組文件數據。 編譯程序時,我不斷收到incompatible pointer type
錯誤。 這是我當前的代碼:
struct fentry *read_fentries(FILE *fp){
fentry *files[MAXFILES];
// EXTRACT FENTRIES AND FNODES FROM FILE
if ((fread(files, sizeof(fentry), MAXFILES, fp)) == 0) {
fprintf(stderr, "Error: could not read file entries\n");
closefs(fp);
exit(1);
}
return files;
}
我的主要問題是如何創建一個預定義大小 (MAXFILES) 的結構數組並從函數中返回它,以便我可以訪問main
的結構數組。 我是否必須使用malloc
分配內存?
如果您包裝數組,您也可以返回值。
#define MAXFILES 50
struct _fentry
{
FILE *fp;
int somedata[3];
double anotherdata[10];
/* ... */
};
struct fentry
{
struct _fentry entries[MAXFILES];
};
struct fentry foo()
{
struct fentry entries;
/* .... */
return entries;
}
例如,您必須使用malloc
為其分配空間,因為正如您從錯誤中看到的,您返回一個指向本地地址的指針,這是一個問題,因為一旦退出此函數, files
數組將被釋放/不存在。 所以你返回的指針將指向一個無效的內存位置。
所以做這樣的事情:
struct fentry *files = malloc(MAXFILES * sizeof(fentry);
同樣在這種情況下,不要忘記在不再需要時使用free(*ptr_to_array)
釋放分配的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.