2012-03-15 190 views
0

我想使用絕對路徑打開文件。我目前正在Windows中執行此操作,但也需要在Unix環境中工作。使用絕對路徑打開文件

該路徑使用環境變量組成,如下所示。

char *dataPath = getenv ("DATA"); 
strcat(dataPath, "/index"); 
char indexPath[255] = {0}; 
strcat(indexPath, dataPath); 
strcat(indexPath, "/index.tbl"); 
printf("Path: %s\n", indexPath); 
ip = fopen(indexPath, "r"); 

此代碼打印出C:\ Data/index/index.tbl,但應用程序無法打開文件。

我在做什麼錯?

回答

3

這是不正確的:

char *dataPath = getenv ("DATA"); 
strcat(dataPath, "/index"); 

,並且可以重寫過程環境塊的一部分。從man getenv

通常情況下,getenv()返回一個指向環境列表中的字符串的指針。調用者必須注意不要修改該字符串,因爲這會改變進程的環境。

您需要分配足夠大,以包含完整路徑的緩衝區和getenv("DATA")複製,然後strcat()sprintf()

const char* dataPath = getenv("DATA"); 
char* fullPath = 0; 
if (dataPath) 
{ 
    /* 6 for "/index" and 1 for terminating null character. */ 
    fullPath = malloc(strlen(dataPath) + 6 + 1); 
    if (fullPath) 
    { 
     sprintf(fullPath, "%s/index", dataPath); 

     free(fullPath); 
    } 
}