2013-09-23 3 views
0

Я новичок в C, но опытный в python. Я ищу функциональный эквивалент функции string.split ("/") [- 1] в C. До сих пор мне удалось создать массив символов, который имеет весь мой путь. Я хочу разбить эту строку, поэтому у меня есть только имя файла. Ниже я включил образецСплит имя файла из пути в C

char input_file_path [1024] 
strcpy(input_file_path, "/this/is/my/file/path.txt") 

Я хочу, чтобы некоторые функции, которые будут принимать input_file_path и просто расколоть вне path.txt от него. Благодаря!

+1

Я хотел бы избежать метод, как 'String.Split («/») [- 1]', потому что разделитель каталогов не может быть '«/»' –

ответ

5

Вы ищете basename(3):

Функция basename() возвращает последний компонент из имени пути указал по пути, удаляя завершающую «/» символов.

Пример:

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

int main(void) 
{ 
    char path[] = "/this/is/my/file/path.txt"; 
    char *file = basename(path); 
    printf("%s\n", file); 
    return 0; 
} 

Сложение & пробег:

$ make example && ./example 
cc  example.c -o example 
path.txt 
+2

Следует отметить, что базовое() обеспечивается POSIX, не C сам. –

+0

Это правда. Если вы находитесь в окнах, вам может понадобиться что-то еще. OP имеет '/' символы на своем пути. Моя страница-man говорит, что это от X/Open, а не от POSIX. –

+0

Думаю, вы используете устаревшие справочные страницы. Последняя версия man-страниц kernel.org (версия 3.53) перечисляет его как «POSIX.1-2001». Это также в Руководстве программиста POSIX: http://www.unix.com/man-page/POSIX/3posix/basename/ –

0

Пробовать strtok().

Посмотрите на это с помощью команды man strtok. Страницы man - отличное руководство для изучения C, не выходя из безопасности вашей командной строки.

+0

Нет никакой веской причины использовать strtok, предпочитая значительно улучшенный strtok_r. – SirDarius

+0

Правда. В обоих направлениях OP все равно должен научиться использовать страницы 'man', поскольку они являются очень полезным инструментом при программировании на C/C++. – ask

Смежные вопросы