簡體   English   中英

如何從 C 中的函數返回結構數組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM