我有一个文件名需要解析以获取文件类型(.txt,.pdf,.jpg等)。我用strrchr
来获取'。'的最后一次出现。从文件名。
我有一个char *outputfilename = "output";
我需要与filetype连接,基本上得到“output.pdf”或“output.jpg”取决于我收到的文件名。
任何线索?
答案 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;
}
}
snprintf
比strcat
更安全,更容易,而且更灵活。它可能不会慢得多,当然也不足以在像这样的应用程序中注意到。
如果您进行多次连续strcat
次调用以在二次时间内构建字符串,您甚至可能会发现snprintf
变得更快。无论如何,它几乎总是更具可读性。