字符串中的子字符串C,如folder1 / file1.txt

时间:2010-01-29 11:15:59

标签: c string substring substr

我有像“folder1 / file1.txt”或“foldername1 / hello.txt”这样的字符串,我需要使用包含斜杠(/)标识文件夹名称的子字符串(例如:from“ folder1 / file1.txt“我需要”folder1 /“)。
文件夹名称的长度不一样。 我怎么能在C ??感谢

4 个答案:

答案 0 :(得分: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,你需要决定该做什么,表明斜杠不在那里。

答案 1 :(得分:3)

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

char *p;

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

/* filename now points to just the path */

答案 2 :(得分: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);
}

答案 3 :(得分:1)

如果你在POSIX机器上工作,你可以查找dirname()功能,它可以或多或少地做你想要的功能。有一些特殊情况,它处理的是天真的代码没有 - 但要注意标准中的狡猾的单词(关于修改输入字符串,可能返回指向输入字符串的指针,或者可能是指向可修改的静态内存的指针)更高版本)。

它(dirname())不会保留您所说的所需的尾部斜杠。但是,这很少是一个实际问题;在目录名和文件之间添加斜杠并不难。