假设有一个名为12345.jpg的文件。在C中,如何获取文件扩展名以便与某些文件扩展名进行比较?如果有任何内置功能,请告诉我。
答案 0 :(得分:9)
执行此操作的功能以及测试工具:
#include <stdio.h>
#include <string.h>
const char *getExt (const char *fspec) {
char *e = strrchr (fspec, '.');
if (e == NULL)
e = ""; // fast method, could also use &(fspec[strlen(fspec)]).
return e;
}
int main (int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++) {
printf ("[%s] - > [%s]\n", argv[i], getExt (argv[i]));
}
return 0;
}
用以下方式运行:
./program abc abc. abc.1 .xyz abc.def abc.def.ghi
给你:
[abc] - > []
[abc.] - > [.]
[abc.1] - > [.1]
[.xyz] - > [.xyz]
[abc.def] - > [.def]
[abc.def.ghi] - > [.ghi]
答案 1 :(得分:5)
大概:
#include <string.h>
char *extn = strrchr(filename, '.');
这将为您提供指向扩展周期的指针,如果没有扩展名则为空指针。您可能需要做更多的尽职调查,以确保在点之后没有斜线,等等。
答案 2 :(得分:2)
有一个便携式CRT解决方案:_splitpath。
在Windows中还有一个名为PathGetExtension的未记录的shell32 API,但这在很多方面都是邪恶的,我可能不应该注意到它。
答案 3 :(得分:-1)
使用strchr 第一个数组成员将为您提供文件名 第二个数组成员将为您提供扩展名