gpt4 book ai didi

c - 使用 strtok() 定界路径

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:08 25 4
gpt4 key购买 nike

我正在尝试从其路径获取文件。这是我的代码:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com