删除 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.h
和 basename()
(或 dirname.h
和 base_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);
以上代码没有任何类型的错误检查。评论提示需要进行哪些检查。
我有一个名为 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.h
和 basename()
(或 dirname.h
和 base_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);
以上代码没有任何类型的错误检查。评论提示需要进行哪些检查。