我正在尝试从其路径获取文件。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char split_path(char *path){
char *str1, *delim;
char buf[255];
int i, max;
char *token = "/";
for (i = 1, str1 = path; ; i++, str1 = NULL){
delim = strtok(str1, token);
if (delim == NULL){
break;
}
buf[i] = *delim;
max = i;
}
char last = buf[max];
return last;
}
int main(int argc, char *argv[]){
if (argc != 3){
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
char last = split_path(argv[1]);
printf("%c\n", last);
return 0;
}
因此,如果我输入/a/b/c/d ,它会返回我想要的“d”。 但是如果我输入/a/b/c/d.txt,当我需要的是 'd.txt' 时,它只返回 'd' 而没有 '.txt'。 它似乎只在最后一个/之后获得第一个索引。我似乎无法弄清楚问题所在。 非常感谢帮助。
最佳答案
您的问题是 split_path 正在返回 strtok 的最后一个好结果的第一个字母。
更改 split_path 以返回一个字符串,并稍微修改它......像这样:
char *split_path(char *path){
char *str1, *delim;
int i, max;
char *last = NULL;
char *token = "/";
for (i = 1, str1 = path; ; i++, str1 = NULL){
delim = strtok(str1, token);
if (delim == NULL){
break;
}
last = delim;
}
return last;
}
int main(int argc, char *argv[]){
if (argc != 3){
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
char *last = split_path(argv[1]);
printf("%s\n", last);
return 0;
}
关于c - 使用 strtok() 定界路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262810/