假设我有以下字符串,它看起来像文件路径:
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}的其余部分}
答案 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”的文件名。没有任何复制。