如何在C语言中检查字符串是否以“.csv”结尾

13

如何在C语言中检查字符串是否以.csv结尾?

我已经尝试使用strlen,但没有成功。

3个回答

55

如何考虑:

char *dot = strrchr(str, '.');
if (dot && !strcmp(dot, ".csv"))
    /* ... */

3
然而,如果字符串中包含超过一个句点(可能性不大,但确实可能出现),这种方法就行不通了。 - kappamaki
28
这能够奏效是因为strrchr可以找到最右边的点号。 - undur_gongor
1
这仍然不起作用,因为您的路径中可能有一个 .,但文件名中没有。 - Daniel Stephens
2
在这种情况下,.csv 不是文件名的结尾,因此条件不符合。 - Raslanove

29
if(strlen(str) > 4 && !strcmp(str + strlen(str) - 4, ".csv"))

2
那么,".csv"不是以".csv"结尾的吗? - undur_gongor
4
通常情况下,一个名为.whatever的文件被认为是没有扩展名的。因此,在他的使用情境中,这更加合理(在我看来)。 - ThiefMaster
...同意(假设我们谈论的是文件名)。 - undur_gongor
strlen 可能是一个昂贵的操作,被调用了两次。 - Героям слава
说实话,这个字符串很可能是一个文件名/路径,在它上面调用 strlen 不会很耗费时间,除非你在循环中对数百万个文件都这样做。 - ThiefMaster
显示剩余4条评论

11

ThiefMaster的代码最简单(也是最常用)的形式如下:

int string_ends_with(const char * str, const char * suffix)
{
  int str_len = strlen(str);
  int suffix_len = strlen(suffix);

  return 
    (str_len >= suffix_len) &&
    (0 == strcmp(str + (str_len-suffix_len), suffix));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接