从字符串中剥离扩展名和目录?

时间:2015-03-30 04:19:59

标签: c string

说我有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。

1 个答案:

答案 0 :(得分:0)

对于Windows,请查看splitpath库函数。 见splitpath (MSDN)。对于您的情况,为' drive',' dir'传递NULL。因为你不需要这些部分,所以你可以使用它们。

希望有所帮助。