我正在尝试在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值都会更改(由于我猜的内存位置不同)。有人可以帮忙吗?
答案 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")
此外,您可能希望使用memrchr
或strrchr
,因此带有(a)句点的文件名会将最后一部分作为扩展名返回。