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

时间:2018-05-06 03:18:04

标签: c string string.h strrchr

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

 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(),其中我使用this提取子字符串strchr(filepath, '/'),现在我需要提取子字符串{{1}的其余部分}

2 个答案:

答案 0 :(得分:2)

将所有内容复制到文件名,然后附加'\0'

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

...

free(path);

答案 1 :(得分:0)

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

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

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