如何在最后一个点(。)和字符串结尾之间获取字符串,并将其与C中的另一个字符串连接起来?

时间:2018-05-28 03:48:01

标签: c string parsing

我有一个文件名需要解析以获取文件类型(.txt,.pdf,.jpg等)。我用strrchr来获取'。'的最后一次出现。从文件名。 我有一个char *outputfilename = "output";我需要与filetype连接,基本上得到“output.pdf”或“output.jpg”取决于我收到的文件名。 任何线索?

1 个答案:

答案 0 :(得分:1)

我使用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;
  }
}

snprintfstrcat更安全,更容易,而且更灵活。它可能不会慢得多,当然也不足以在像这样的应用程序中注意到。

如果您进行多次连续strcat次调用以在二次时间内构建字符串,您甚至可能会发现snprintf变得更快。无论如何,它几乎总是更具可读性。