如何从 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" 的文件名。没有任何复制。
假设我有以下看起来像文件路径的字符串:
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" 的文件名。没有任何复制。