如何从 strrchr() 或 strchr() 中提取剩余的子字符串?

How to extract the leftover substring from strrchr() or strchr()?

假设我有以下看起来像文件路径的字符串:

 char *filepath = "this/is/my/path/to/file.jpg";

我可以使用strrchr()提取file.jpg如下:

 char *filename =  strrchr(filepath, '/') + 1;

现在我需要提取并存储字符串的其余部分 this/is/my/path/to。我如何以最有效的方式做到这一点?请注意,我想避免使用 strtok()regex 或大的迭代循环。

如果:

那就太好了

我可以将相同的子字符串提取技术应用于 strchr(),其中我使用 strchr(filepath, '/') 提取了子字符串 this,现在我需要提取子字符串的其余部分 is/my/path/to/file.jpg

复制文件名之前的所有内容,然后附加一个'[=11=]' :

int   pathLen = filename - filepath;
char *path = (char *) malloc(pathLen + 1);
memcpy(path, filepath, pathLen);
path[pathLen] = '[=10=]';

...

free(path);

如果您的字符串在可写内存中(即,不是字符串文字),您可以这样做

char *p =  strrchr(filepath, '/');
*p = '[=10=]';
char *filename = p + 1;

这将为您提供指向 "this/is/my/path/to" 的文件路径和指向 "file.jpg" 的文件名。没有任何复制。