2013-11-21 153 views
-1

我試圖分析在C像這樣的字符串:查找路徑父文件夾

/afolder/secondfolder/thirdone 

做一個函數和函數應該返回此:

/afolder/secondfolder 

我tryed很多東西...

int getParentFolder(const char *pPathNewLink, char* TargetDirectory) { 

    char *dirPath = strrchr(pPathNewLink, '/'); 

    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink); 

    return 1; 
} 

我不能使用操作系統庫。我必須這樣做。

我tryed調用這樣的功能:

char * test; 
getParentFolder("/var/lib",test); 
printf("%s", test); 

但我得到一個賽格故障...

+0

您的代碼適用於我。它完全符合你的說法。顯示調用這個函數的代碼,它可以調用它錯誤的。 – JIghtuse

+0

@角色我可以這樣的功能:\t \t char * targetFolder; getParentFolder(pDirName,targetFolder); – Lorac

+0

您是否爲TargetDirectory分配內存? – starrify

回答

1

我想,其原因是,你有沒有爲test分配內存。
由於您正在嘗試strncpyTargetDirectory,因此必須對其進行初始化並具有一個內存區域。

嘗試:

char *test = malloc(256); 
/* or this */ 
char test[256]; 

然後做你喜歡的事情:

GetDirFromPath("/var/lib",test); 
printf("%s", test); 

另外,如果你選擇了一個malloc,不要忘記在使用後釋放它:

free(test); 

編輯:

還有另一個問題,對不起,最初沒有看到它。
要複製您使用strncpy字符串的第一部分,但是你仍然需要填寫的字符串這樣結束'\0'

int getParentFolder(const char *pPathNewLink, char* TargetDirectory) { 
    char *dirPath = strrchr(pPathNewLink, '/'); 
    strncpy(TargetDirectory, pPathNewLink, dirPath - pPathNewLink); 
    TargetDirectory[dirPath - pPathNewLink] = 0; // please make sure there is enough space in TargetDirectory 
    return 1; 
} 

請讓我知道,如果仍然有任何問題。

+0

試過了,沒有工作仍然收到seg故障。 – Lorac

+0

你必須使用這個。或者你必須將「test」定義爲char「test [256]」。即使現在你得到一個SegFault,那麼一定有其他東西導致它。 – Abhineet

+0

@Lorac是的,還有別的東西。請看我編輯的答案。 – starrify