Поиск и проверка расширения файла - PullRequest
1 голос
/ 29 января 2012

Я прочитал другие статьи, чтобы найти расширение файла по имени файла в C, и я пробовал их, но проблема в том, что они не работают правильно.

Это мой код:

void optionOne()
{
char filenameSrc[101],filenameDest[101];
strcpy(filenameSrc,"");
do
{
    printf("Enter source filename (*.c) : ");
    scanf("%s",filenameSrc);
}while (check_file_ext(filenameSrc) != 0);
fflush(stdout);
printf("Enter destination filename : ");
scanf("%s",&filenameDest);
char line[80];
FILE* fp = fopen("data.inp","r");
while(fgets(line,sizeof(line),fp))
{
   // do something
}
fclose(fp);
}

и функция check_file_ext:

const char *get_file_ext(const char *filename)
{
   const char *dot = strrchr(filename, '.');
   if(!dot || dot == filename) return "";
   return dot + 1;
}
int check_file_ext(const char* filename)
{
   return strcmp(get_file_ext(filename),"c") == 0;
}

Проблема в методе проверки для расширения файла?Не могли бы вы сказать мне, где проблема в коде?

1 Ответ

2 голосов
/ 29 января 2012

Не возвращать "", вместо этого возвращать указатель на '\0' байт:

// gcc -std=c99
#include <stdio.h>
#include <string.h>

static const char*
get_file_ext(const char *filename) {
   const char *ext = strrchr(filename, '.');
   return (ext && ext != filename) ? ext : (filename + strlen(filename));
}

int main() {
  char *files[] = {"a.c", ".a", "a", NULL };

  for (char** f = files; *f != NULL; ++f)
    printf("ext: '%s'\n", get_file_ext(*f));
}

Примечание: он включает . в расширение для согласованности.

Выход

ext: '.c'
ext: ''
ext: ''

Обратное условие: do{ ... }while(strcmp(get_file_ext(filename), ".c") != 0);

...