用C获取文件的扩展名

时间:2013-11-29 20:22:07

标签: c string text-files

我正在尝试在C中编写一个函数来获取文件的扩展名。所以这是我的代码

char *getFileNameExtension(char *filename){
    char *ext = memchr(filename, '.',strlen(filename));
    return ext;
}

工作正常。但是,当我试图检查特定的文件类型,如文本文件(.txt)时,我使用此代码

if (getFileNameExtension(filename)==".txt"){
   printf("%s\n",filename);
}

但它不起作用。我试图将两个字符串打印为整数和字符串

printf("%s %s",".txt",getFileNameExtension(txtFile));
printf("%d %d",".txt",getFileNameExtension(txtFile));

第一个输出正常,我得到:.txt .txt,但是当我将它们打印为整数(我猜是ascii代码)时,我得到了这个结果:27918619 4196714。此外,每次执行代码时,第一个字符串的int值都会更改(由于我猜的内存位置不同)。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

你无法比较那样的字符串,你正在使用的是指针比较......

这是正确的版本:

if (strcmp(getFileNameExtension(filename), ".txt") == 0)

我建议在C字符串上阅读更多内容。

此外,googlers的一个亮点:

What if the filename have multiple "extensions"? Use e.g. strrchr to get the last dot. – Joachim Pileborg

答案 1 :(得分:2)

您正在比较两个指针,而不是两个字符串。而不是

getFileNameExtension(filename)==".txt"

你应该检查:

!strcmp(getFileNameExtension(filename), ".txt")

此外,您可能希望使用memrchrstrrchr,因此带有(a)句点的文件名会将最后一部分作为扩展名返回。