说我有sring
my/file/file.txt
我如何将斜杠和扩展名剥离到file
?我有谷歌问题,人们建议basename
,但我也在寻找可以在Windows上运行的东西,任何想法?
以下是我尝试的内容:
char *rm_ext(char *file) {
char *retstr;
char *lastdot;
if (file == NULL)
return NULL;
if ((retstr = malloc (strlen (file) + 1)) == NULL)
return NULL;
strcpy (retstr, file);
lastdot = strrchr (retstr, '.');
if (lastdot != NULL)
*lastdot = '\0';
return retstr;
}
char *get_file_name(char *path) {
char *s = strrchr(path, '/');
if (!s) return rm_ext(strdup(path));
char *res = strdup(s + 1);
char *res_no_ext = rm_ext(result);
return res_no_ext;
}
它有效,但不是D:/
或双斜线,我认为它给了我内存泄漏,因为有一堆隐藏的mallocs来自strdup。
答案 0 :(得分:0)
对于Windows,请查看splitpath库函数。 见splitpath (MSDN)。对于您的情况,为' drive',' dir'传递NULL。因为你不需要这些部分,所以你可以使用它们。
希望有所帮助。