2016-04-27 74 views
-1

我需要檢查一個字符串中存儲的路徑是否實際上是一個文件的路徑,該文件的名稱已存儲在另一個字符串中。比較文件名與可選文件擴展名

例如:假設我有一個文件中的/ etc/PROG/MYPROG

我有這樣的功能:

char *slash = strrchr(procname, '/'); 
if(slash && !strcmp(slash, name)){ 
    printf("FOUND!\n"); 
} 

,尋找「MYPROG」,當它工作正常,但如果文件具有擴展名(例如,如果字符串以「/vim.basic」結尾),那麼它顯然不起作用。我希望if語句在查找「vim」時爲true)。

我想我必須使用strrchr來查找點的位置,如果存在,停止比較該char,但我不知道如何構造條件語句以這種方式工作。

+0

我知道,我可以使用的strstr,但我想子被明確betwee發現n斜槓'/'和(如果存在)'點'。' – Nidrax

+2

您是否有更多的投入,比較和預期產出的例子? –

+0

你可以試試strcmp –

回答

1

它需要strncmp和一些額外的計算和檢查。

請注意,你的代碼是關閉的1在這一點上:

if (slash && !strcmp(slash, name)) 

.. slash將指向的斜線,所以除非你在name佔的是,它總是會失敗。

此代碼的工作:

if (slash && 
    !strncmp(slash+1, name, strlen(name)) && 
    (!slash[1+strlen(name)] || slash[1+strlen(name)] == '.')) 
{ 
    printf("FOUND!\n"); 
} 

它檢查在slash+1第一Ñ字符等於name長度的name - 因此,它會檢查vimetc/vim.basic - 然後檢查如果name之後緊跟着一個0結尾字符串.字符。

這是對眼睛稍微容易些,如果你可以修改procname

if (slash) 
{ 
    char *dot = strchr (slash, '.'); 
    if (dot) *dot = 0; 
    if (!strcmp(slash+1, name)) 
    { 
     printf("FOUND!\n"); 
    } 
} 

(不會工作,如果procname無法更改爲char *procname = ".." OTOH如果可以,你甚至可以通過恢復原來的字符串。在結尾處增加

if (dot) *dot = '.'; 

。)