首页 > 解决方案 > 如何在点(。)的最后一次出现和字符串的结尾之间获取字符串,并将其与 C 中的另一个字符串连接起来?

问题描述

我有一个文件名,我需要对其进行解析以获取文件类型(.txt、.pdf、.jpg 等)。我曾经strrchr得到最后一次出现的“。” 从文件名。我有一个char *outputfilename = "output";需要与文件类型连接的文件,以根据我收到的文件名基本上得到“output.pdf”或“output.jpg”。有什么线索吗?

标签: cstringparsing

解决方案


我会使用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结果更快。无论如何,它几乎总是更具可读性。


推荐阅读