删除 C 字符数组中最后一个正斜杠(包括该斜杠)之前的所有内容

Remove everything before last forward-slash (including that slash) in a C char array

我有一个名为 arg 的字符数组。 arg[0] 是文件的路径。我不知道确切的路径,所以就说它是 /path/to/file。我不想知道完整路径,我只想知道文件名(在本例中为 file)。那么如何删除最后一个正斜杠(包括那个斜杠)之前的所有内容,导致 "file",而不是 "/path/to/file",或 "alternatefile",而不是 "/alternatepath/to/alternatefile"

这是我的代码:

#include <stdio.h>
int main(int argc, char *argv[]) {
    char *arg[] = argv;
    // This is where I need code to trim everything before the last forward-slash
    printf("%s\n", arg[0]);
}

所以我需要 arg[0] = strtrm(everythingbefore, "/", arg[0]);

这是一个简单的解决方案:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc > 0) {
        char *base = strrchr(argv[0], '/');
        if (base) {
            base += 1;
        } else {
            base = argv[0];
        }
        printf("%s\n", base);
    }
    return 0;
}

libgen.hbasename()(或 dirname.hbase_name())是否普遍可用且有效?

#include <stdio.h>
#include <libgen.h>

int main() {

    printf("%s\n", basename("/alternatepath/to/alternatefile"));

    return 0;
}

印刷品

alternatefile

很简单:

char full_path[] = "/some/path/to/a/file";

// Get the position of the last slash
char *last_slash = strrchr(full_path, '/');

// `last_slash` now points to the last slash, or is NULL if none is found
// That means `last_slash + 1` points to the first character in the file-name
// (or to the terminator if the path ends with a slash)

// Copy the file-name to another array
char file_name[PATH_MAX];
strcpy(file_name, last_shash + 1);

以上代码没有任何类型的错误检查。评论提示需要进行哪些检查。

Shown in action.