Извлечение расширения файла - PullRequest
0 голосов
/ 20 января 2012

Некоторые детали

  • Язык: C
  • Система: Linux;работая с командной строкой (терминал), файлы считываются через терминал
  • Опыт пользователя с C: 3 месяца

Я пытался извлечь расширение данного файла дляНапример, «myfile.wld», чтобы позже я смог проверить, был ли введен правильный тип файла на терминале, прежде чем я начну работать с содержимым файла.Это необходимо для назначения

Я использовал функцию "strtok", чтобы разделить входные данные на разделы разделителем "."

dot=strtok(argv[1], ".");
filename=dot;

имя файла теперь является первой частью ввода «myfile», мой вопрос: как мне перейти ко второй части после «.», Пожалуйста, сообщите, и, пожалуйста, наберитесь терпения, чтобы сделать этокак можно проще, чтобы я мог использовать ваши ответы

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 января 2012
char *extension;
extension=strtok(NULL, ".");

после вашего кода выше.

Сначала вызовите strtok() с указателем на str вот так strtok(str, ".").
Затем продолжайте звонить strtok(NULL, ".") для получения следующего токена.
Если возвращаемое значение равно нулю (\0), то это конец строки.

0 голосов
/ 20 января 2012

Имя файла может содержать более одного ".": foo.bar.buz , например.С вашим кодом вы получите foo и bar.buz вместо foo.bar и buz , как и ожидалось.Правильный способ - использовать что-то вроде этого:

char *filename = argv[1];
char *ext = strrchr(argv[1], '.');
if (ext) {
  *ext = '\0';
  ext++;
}
0 голосов
/ 20 января 2012

вызов strtok, снова передавая NULL в качестве параметра:

extension=strtok(NULL,".")

первый вызов strtok должен указывать на строку, которую вы хотите токенизировать.Все вызовы после этого должны иметь NULL в качестве первого параметра, strtok будет возвращать токены, пока не будет обработана вся строка, переданная во время первого вызова

0 голосов
/ 20 января 2012

См. http://www.cplusplus.com/reference/clibrary/cstring/strtok/

По сути, вам просто нужно снова вызвать strtok с указателем NULL.Итак:

filename = strtok(argv[1], ".");
fileext = strtok(NULL, ".");
...