Вывести символы после определенного символа в отдельную строку - C (СИ)
Формулировка задачи:
Здравствуйте!
У меня есть строка (массив char[260]) с путем к файлу, например "C:\\Prog\\app.exe". Как можно вывести название файла в отдельную строку? Я примерно представляю что надо просканировать каждый символ на backslash, и когда сканирование достигнет последнего backslash, то выделить после этого символа оставшиеся и скопировать в новую строку, но у меня не очень получается это сделать.
Подскажите пожалуйста!
Решение задачи: «Вывести символы после определенного символа в отдельную строку»
textual
Листинг программы
char *get_file_name(const char *path)
{
char *filename;
int length = strlen(path), i;
for (i = length-1; i >= 0; --i)
if (path[i] == '\\') break;
++i;
filename = (char *)malloc((length - i + 1) * sizeof(char));
strcpy(filename ,path+i);
return filename;
}
Объяснение кода листинга программы
- Функция
get_file_nameпринимает на вход указатель на строку -pathи возвращает указатель на строку -filename. - Внутри функции создаются две переменные:
filenameиlength. Переменнаяlengthинициализируется значением функцииstrlen, которая считает количество символов в строкеpath. Значение переменнойlengthбудет использоваться для выделения памяти под строкуfilenameи для ограничения цикла. - Переменная
filenameинициализируется значениемNULL. Позже ей будет присвоено значение выделенной памяти. - Далее идет цикл
for, который проходит по всем символам строкиpathв обратном порядке. Переменнаяiитерируется отlength-1до0. Условие циклаifпроверяет, является ли текущий символ\\. Если это так, то цикл прерывается иiувеличивается на1. - После цикла
forвыделяется память под строкуfilenameс помощью функцииmalloc. Формулаlength - i + 1используется для вычисления размера памяти, так как память выделяется под строку, которая начинается с символа после последнего\\в строкеpath. - С помощью функции
strcpyв выделенную память копируется подстрокаpath+i, начиная с символа после последнего\\в строкеpath. - В конце функции возвращается указатель на строку
filename. - В коде не обрабатываются ошибки, которые могут возникнуть при выделении памяти или копировании строки.