2012-10-10 52 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以避免分段错误。

希望这有助于延长。 ;)