2015-10-01 52 views
0

我需要根據存儲在數組中的數據創建FILE結構。 在我的代碼中,我有fopen函數,它返回一個FILE。這個想法是讀取存儲在數組中的所有數據,轉換爲FILE結構並最終返回FILE。fopen - 作爲流數據的原始數據C

即:

FILE validFile (char *fileName){ 
    char *data; 
    FILE *fp; 

    data = malloc(sizeof(char*)); 

    populateData(data); 

    fp = fopen(data, "r"); 

    return fp; 
} 

這可能嗎?

感謝和問候, 克里斯蒂安。

+0

是什麼操作系統你在工作嗎?儘管我不確定Windows,POSIX爲此提供了一個解決方案。 – fuz

+0

fp是一個文件*,而不是文件 –

回答

2

是的,這是可能的,雖然不是純C.如果你編寫的類Unix操作系統,如Linux,你可以使用fmemopen函數從POSIX:

FILE validFile (char *fileName){ 
    char *data; 
    FILE *fp; 

    data = populateData(); 

    /* data_size is the length of the buffer */ 
    fp = fmemopen(data, data_size, "r"); 

    return fp; 
} 
-2

另一個問題我見你發佈的代碼是fp是一個堆棧又名自動變量;一旦你的validFile()函數返回,fp超出範圍,它的值是未定義的。

您可以返回fp,如果你改變它的存儲類,它的範圍,把它作爲一個參數,與malloc()calloc() ......像這樣分配的,比如:

FILE **validFile (char *fileName){ 
    char *data; 
    FILE **fpp; 

    if (fpp = (FILE **)calloc(1,sizeof(FILE *))) { 

     data = (char *)malloc(sizeof(char*)); 

     populateData(data); 

     if ((*fpp = fmemopen(data, data_size, "r"))) { 

      /* 
      */ 

     } else { 

      /* 
      */ 

     } 

    } else { 
     /* 
     * calloc() failed... 
     */ 
    } 

    return *fpp; 
} 
+0

嗨拉里。謝謝你的幫助。我在標準C編程,我沒有訪問fmemopen。是否可以爲我提供fmemopen函數實現以將其移至我的項目?我在哪裏可以找到源代碼?感謝和最好的問候。克里斯蒂安。 – cristiancrm

+1

你的第一段是錯的 - 是的'fp'是一個局部變量,但它是由值返回的,而不是引用,所以這裏沒有懸掛引用。分配額外的內存來保持它只是泄漏內存,並沒有達到任何積極的。 –

+0

@cristiancrm你正在編程什麼操作系統?這個問題至關重要。 – fuz