Получение расширения файла на C

Как получить расширение файла (например, .tiff ) из имени файла на C?

Спасибо!


  const char * get_filename_ext (const char * filename) {const char * dot = strrchr (имя_файла, '.');  если (! точка || точка == имя файла) return "";  return dot + 1;} printf ("% s  n", get_filename_ext ("test.tiff")); printf ("% s  n", get_filename_ext ("test.blah.tiff")); printf ("%  s  n ", get_filename_ext (" test. ")); printf ("% s  n ", get_filename_ext (" test ")); printf ("% s  n ", get_filename_ext (" ... "));   

21

Найдите последний точка с помощью strrchr , затем продвинуть на 1 символ

  #include /* printf */# include  /* strrchr */ext = strrchr (filename, '.'); if (! ext) {/* без расширения */} else {printf ("extension is% s  n", ext + 1);}  

Поделиться
Улучшите этот ответ
отредактировал 15 марта ’11 в 9:14
ответил 15 марта ’11 в 9:05
  • Нет необходимости копировать его — вы вернете часть строки, которая заканчивается концом исходная строка, поэтому никаких изменений не требуется. — ThiefMaster 15 марта 2011, в 9:11
добавить комментарий |

Найдите последнюю точку с помощью strrchr , затем переместите на 1 символ

  #include /* printf */# include /* strrchr */ext = strrchr (filename, '.'); if (! ext) {/* нет  extension */} else {printf ("extension is% s  n", ext + 1);}  

6

Вы можете использовать функцию strrchr , которая ищет последнее вхождение символа в строке, чтобы найдите последнюю точку. Оттуда вы можете считать оставшуюся часть строки как расширение.

Поделиться
Улучшить этот ответ
отредактировано 4 марта ’17 в 17:39
pat
12. 2k11 золотой знак2020 серебряных знаков4949 бронзовых знаков
ответил 15 марта ’11 в 12:04
добавить комментарий |

Вы можете использовать функцию strrchr , которая ищет последнее вхождение символа в строку , чтобы найти последнюю точку. Оттуда вы можете считать оставшуюся часть строки как расширение.


0

Вот версия, которая также работает для файлов (или каталогов) путей :

  #include  #include  const char * FileSuffix (const char path []) {const char * result;  int i, n;  assert (путь! = NULL);  n = strlen (путь);  я = п - 1;  while ((i> = 0) && (path [i]! = '.') && (path [i]! = '/') & (path [i]! = '\')) {i--  ;  } if ((i> 0) && (path [i] == '.') && (path [i - 1]! = '/') && (path [i - 1]! = '\'))  {результат = путь + я;  } else {результат = путь + n;  } возврат результата;} int main (void) {assert (strcmp (FileSuffix ("foo/bar.baz.qux"), ".qux") == 0);  assert (strcmp (FileSuffix ("foo.bar.baz/qux"), "") == 0);  return 0;}  

Поделиться
Улучшите этот ответ
ответил 23 декабря ’20 в 16:29
добавить комментарий |

Вот версия, которая также работает для путей к файлам (или каталогам) :

  #include  #include  const char * FileSuffix (const char path []) {const char * result;  int i, n;  assert (путь! = NULL);  n = strlen (путь);  я = п - 1;  while ((i> = 0) && (path [i]! = '.') && (path [i]! = '/') & (path [i]! = '\')) {i--  ;  } if ((i> 0) && (path [i] == '.') && (path [i - 1]! = '/') && (path [i - 1]! = '\'))  {результат = путь + я;  } else {результат = путь + n;  } возврат результата;} int main (void) {assert (strcmp (FileSuffix ("foo/bar.baz.qux"), ".qux") == 0);  assert (strcmp (FileSuffix ("foo.bar.baz/qux"), "") == 0);  возврат 0;}  

Оцените статью
Botgadget.ru
Добавить комментарий