유닉스 경로를 분할하는 것은 단지 /
으로 분할하는 것 이상입니다. 이 모든
- 많은 복잡한 작업과 마찬가지로
/foo/bar/baz/
/foo/bar/baz
/foo//bar/baz
... 같은 경로를 참조하십시오, 그것은 스스로 할 것이 아니라 기존 기능을 사용하지 않는 것이 좋습니다 . 이 경우에는 POSIX dirname
및 basename
기능이 있습니다.
dirname
는
basename
당신은 유닉스 경로를 분할 할 수 있습니다, 함께 다음을 사용하여 파일 경로
의 마지막 부분을 반환하는 파일 경로에서 상위 경로를 반환합니다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libgen.h>
int main(void) {
char filepath[] = "/foo/bar//baz/";
char *fp = filepath;
while(strcmp(fp, "/") != 0 && strcmp(fp, ".") != 0) {
char *base = basename(fp);
puts(base);
fp = dirname(fp);
}
// Differentiate between /foo/bar and foo/bar
if(strcmp(fp, "/") == 0) {
puts(fp);
}
}
// baz
// bar
// foo
///
그것은 아니에요 가장 효율적인, 그것은 캐릭터를 통해 여러 패스를 수행하지만 올바른입니다.
그것에 대해 자신의 기능을 작성하는 방법은 무엇입니까? – Cherubim
'strtok'에 대한 정보 – Michi
'strtok'의 유일한 문제점은 호출 한 문자열을 수정한다는 것입니다. 만약 당신이 그걸로 괜찮다면 (그리고 문자열은'const'가 아니다) 문제가 없다. –