Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自类似folder1/file1.txt的字符串的子字符串C_C_String_Substring_Substr - Fatal编程技术网

来自类似folder1/file1.txt的字符串的子字符串C

来自类似folder1/file1.txt的字符串的子字符串C,c,string,substring,substr,C,String,Substring,Substr,我有像“folder1/file1.txt”或“foldername1/hello.txt”这样的字符串,我需要使用包含斜杠(/)的子字符串来标识文件夹名称(示例:从“folder1/file1.txt”我需要“folder1/”)文件夹名称并非都具有相同的长度。 我怎么能用C来做这个??谢谢首先,用strhr找到斜线的位置: char * f = "folder/foo.txt"; // or whatever char * pos = strchr( f, '/' ); 然后复制到合适的

我有像“folder1/file1.txt”或“foldername1/hello.txt”这样的字符串,我需要使用包含斜杠(/)的子字符串来标识文件夹名称
(示例:从“folder1/file1.txt”我需要“folder1/”)
文件夹名称并非都具有相同的长度。
我怎么能用C来做这个??谢谢

首先,用strhr找到斜线的位置:

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(表示斜杠不在那里)该怎么办。

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

char *p;

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

/* filename now points to just the path */
可以使用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);
}

如果您在POSIX机器上工作,您可以查找函数,该函数或多或少满足您的需要。有些特殊情况下,它会处理一些幼稚的代码不会处理的情况,但也要注意标准中的黄鼠狼词(关于修改输入字符串,可能会返回指向输入字符串的指针,也可能是指向可以稍后修改的静态内存的指针)


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

您可能希望使用strrchr()查找从字符串结尾开始的斜杠,这取决于他是想要路径中的第一个目录还是整个shebang-大多数操作系统都有一个函数来完成后一个操作,所以我假设是前者。