Как получить строку между последним вхождением точки (.) И концом строки и связать ее с другой строкой в ​​C? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть имя файла, которое мне нужно проанализировать, чтобы получить тип файла (.txt, .pdf, .jpg и т. Д.).Я использовал strrchr, чтобы получить последнее вхождение '.'из имени файла.У меня есть char *outputfilename = "output";, который мне нужно объединить с типом файла, чтобы в основном получить «output.pdf» или «output.jpg» в зависимости от имени файла, который я получил.Есть ли отведения?

1 Ответ

0 голосов
/ 28 мая 2018

Я бы использовал snprintf (или asprintf, если доступно), что-то вроде этого:

FILE* open_with_extension(const char* base, const char* name) {
  const char* dotp = strrchr(name, '.');
  if (dotp) {
    char filename[MAX_PATH];
    int sz = snprintf(filename, sizeof filename, "%s%s", base, dotp);
    if (sz < sizeof filename) {
      return fopen(filename, "wb");
    }
    else {
      /* Name + extension too long */
      return NULL;
    }
  }
  else {
    /* No extension, some kind of error? */
    return NULL;
  }
}

snprintf и безопаснее, и проще, чем strcat, и намного большегибкий.И это, вероятно, не намного медленнее, конечно, недостаточно для того, чтобы заметить в таких приложениях, как это.

Если вы выполняете более чем несколько последовательных strcat вызовов для построения строки в квадратичном времени, вы можетедаже обнаружить, что snprintf оказывается быстрее.Несмотря на это, он почти всегда более читабелен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...