2012-10-10 95 views
0

我想從絕對路徑名中提取相對路徑名。 C中有這個函數嗎?有沒有函數打印字符串從一個特定的字符開始(我有索引)?C從特定字符打印字符串

+0

您可以添加要打印的索引。 [見這裏](http://liveworkspace.org/code/311f96ccf5f8bd2d66d195009dfd186c)。我不確定任何功能。 – chris

+0

如果你有/不能你的索引只是使用strncpy或者你是由於某種原因試圖使用單獨的複製/緩衝區無效? – goji

+0

謝謝克里斯!那正是我需要的。 –

回答

0

如果你有索引,你可以很容易地做到這一點。

char * src = "YOUR STRING"; 
char * dst; // destination 
dst = (char *) malloc(sizeof(char) * 20); 
dst = (char *)memcpy(dst, &src[THE_INDEX_YOU_KNOW], strlen(src)-THE_INDEX_YOU_KNOW); 
dst[len-start]='\0'; 
+0

太好了!我將在我的代碼中使用它。謝謝 –

2

在POSIX.1-2001(例如Linux)的,man 3 basename給出:

功能目錄名()和基本名稱()破裂的空終止路徑名字符串到目錄和文件名的組件。在通常情況下,... basename()返回最後的'/'後面的組件。尾隨的'/'字符不作爲路徑名的一部分。

+0

如果它在子目錄中,該怎麼辦? – chris

+0

不提取相對路徑名,提取...基本名稱!所有其他可能的相對路徑呢? – goji

+0

@Troy:點了。通過硬鏈接和軟鏈接以及掛載點,我不認爲Unix中有一個簡單的解決方案來解決「從這裏到那裏的最短路徑是什麼?」的問題。 –

0

正如約瑟夫所說,你可以使用basename()。

希望下面的程序能有所幫助。

#include <stdio.h> 
#include <stdlib.h> 
#include <libgen.h> 
#include <string.h> 

int main (int argc, char ** argv) 
{ 
    char *path = "/Users/lionnew/cpgm"; 
    printf ("%s\n", basename (path)); 

    /* If you have an index */ 

    int index =15; 
    int len = strlen(path); 
    char * dest = malloc(len+1); 
    dest[len] = '\0'; 

    strcpy (dest, (path+index)); 
    printf ("\n Destination String %s ", dest); 

} 

注意:確保您的索引值不超過字符串len以避免分段錯誤。

希望這有助於延長。 ;)