2015-01-31 51 views
0

我有一個虛擬函數的char *的getFileName()只返回一個指向字符數組:C瞭解與指針文件字符串作爲名字

char * getFileName() { 
    char buff[11] = "index.html"; 
    char *p; 
    p = buff; 
    printf ("name of the file: %s\n", p); 
    return p; 
} 

在我的情況下,這個指針的名字是

int main() { 
    char *fp; 
    FILE *file; 
    fp = getFileName(); 
    int c; 
    file = fopen(fp, "r"); 
    if (file) { 
     while ((c = getc(file)) != EOF) { 
      putchar(c); 
     }  
     fclose(file); 
    } 
    return (0); 
} 

但是,我不能打開使用指針值作爲名稱的文件,雖然當我打印FP,我如果得到正確的名稱:文件我想從主打開和讀取的名字文件:index.html。任何建議,我可能會錯過?謝謝:)

回答

0

您正在返回一個指向局部變量的指針 - 在getFileName()返回時,buff被銷燬並且p的值指向不再可用的內存。

如果你真的想這樣做,你必須做出一個buff變量static

char *getFileName(void) { 
    static char buff[] = "index.html"; 
    char *p; 
    p = buff; 
    printf ("name of the file: %s\n", p); 
    return p; 
} 

static變量沒有堆棧分配;他們很好..靜態分配。

其他幾個重要的細節:

  • 函數f不接受應被聲明爲f(void)任何參數。
  • 在這種情況下,您不必明確寫出buff的大小,因爲您已使用"index.html"對其初始化。