2010-01-29 50 views
2

我有像“folder1/file1.txt”或“foldername1/hello.txt”字符串,我需要采用字符串标识文件夹名称与斜杠(/)包括
(例如:从“folder1/file1.txt”我需要“folder1 /”)。
文件夹名称并非全部具有相同的长度。 我该怎么做C?感谢从字符串像子文件夹1/file1.txt的子串C

回答

3

首先,找到斜杠用,和strchr位置:

char * f = "folder/foo.txt"; // or whatever 
char * pos = strchr(f, '/'); 

然后复制到一个合适的地方:

char path[1000]; // or whatever 
strncpy(path, f, (pos - f) + 1); 
path[(pos-f)+1] = 0; // null terminate 

你真的应该写一个函数来做到这一点,你需要决定如果strchr()返回NULL,表示斜杠不在那里。

+0

你migth希望从字符串的末尾使用strrchr() – 2010-01-29 11:30:56

+0

找到斜线取决于他是否想要路径中的第一个目录或整个shebang - 大多数操作系统有一个功能来做后者,所以我假设前者。 – 2010-01-29 11:35:53

3

找到最后的'/'字符,前进一个字符,然后截断字符串。假设字符串是可以修改的,并且指向char *filename;

char *p; 

p = strrchr(filename, '/'); 
if (p) 
{ 
    p[1] = '\0'; 
} 

/* filename now points to just the path */ 
1

你可以使用的strstr()函数:

char *s = "folder1/file1.txt"; 
char folder[100]; 

char *p = strstr(s, "/"); 
if (0 != p) 
{ 
    int len = p - s + 1; 
    strncpy(folder, s, len); 
    folder[len] = '\0'; 
    puts(folder); 
} 
1

如果您在POSIX机器上工作,你可以看一下dirname()函数,它可以或多或少地做你想要的。有一些特殊情况是它处理那些朴素的代码没有的 - 但要小心标准中的黄鼠狼字(关于修改输入字符串,可能会返回一个指向输入字符串的指针,或者可能是一个指向可以修改的静态内存的指针后来)。它(dirname())不保留你说你需要的尾部斜线。但是,这很少是一个实际问题;在目录名和文件之间添加斜线并不难。