c - 如何在点(。)的最后一次出现和字符串的结尾之间获取字符串,并将其与 C 中的另一个字符串连接起来?
问题描述
我有一个文件名,我需要对其进行解析以获取文件类型(.txt、.pdf、.jpg 等)。我曾经strrchr
得到最后一次出现的“。” 从文件名。我有一个char *outputfilename = "output";
需要与文件类型连接的文件,以根据我收到的文件名基本上得到“output.pdf”或“output.jpg”。有什么线索吗?
解决方案
我会使用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
结果更快。无论如何,它几乎总是更具可读性。
推荐阅读
- javascript - 缩小时徽标位置发生变化(CSS/Angular4+)
- django - “PersonForm”对象没有属性“as_widget”
- c++ - 在 C++0x 中定义“内联”变量
- php - 返回一个编码的 B64 pdf 文件
- vue.js - How to create router-link programmatically on html render using Datatables.net + Vue.js?
- python - 如何在 Python 中获取每个集群的半径或直径?
- angular - 如何验证反应形式的字段数组?
- r - 双和计算,最有效的方法是什么?
- azure - 使用 powerShell 选择与唯一字符串匹配的所有值
- ruby-on-rails - google vision API HTTP Forbidden 错误的原因?红宝石(导轨)