在c中检查字符串的第一个字母

时间:2017-09-06 16:40:28

标签: c strcmp strncmp

我在C中编写一个非常简单的函数来检查字符串是绝对路径还是相对路径。无论我尝试什么,总是返回假。

以下是我的尝试:

int isAbsolute(char *str){
    if(strcmp(str,"/")){
        return 1;
    }
    return 0;
}

我称之为:

printf("%d\n", isAbsolute("/"));

每次都返回false。显然我错过了一些明显的东西,但我无法弄清楚......

5 个答案:

答案 0 :(得分:6)

无法访问编译器,但我认为这样可行,因为C风格的字符串只是具有终止字符的数组:

let g:ale_type_map = {'perlcritic': {'ES': 'WS', 'E': 'W'}}
let g:ale_type_map = {'perl_perlcritic': {'ES': 'WS', 'E': 'W'}}

答案 1 :(得分:3)

正如所指出的,strcmp仅在被比较的字符串具有相同长度时才匹配。

要比较字符串前面的单个字符,您可以这样做:

int isAbsolute(const char *str) {
  return (str[0] == '/');
}

如果您要查找的前缀长于一个字符,那么this可能会有所帮助。我更喜欢Fred Foo的答案,而不是被接受的答案(和大多数选民一样)。

答案 2 :(得分:2)

strcmp会比较整个字符串,因此如果您传递的字符串为" /"

,则您的函数将只返回true

您可以改为查看strncmp:

if(strncmp(str,"/", 1)) ...

或仅比较一个字符:

(if (str[0] == '/')) ...

答案 3 :(得分:1)

strncmp类似,您可以使用memcmp,其中包含要比较的字节数作为参数:

int isAbsolute(const char *str){
    if (0 == memcmp(str, "/", 1){
         return 1;
    } else {
         return 0;
    }
}

不要忘记返回值$ 0 $意味着平等。在您的代码中,在这种情况下返回0,这可能不是您想要的。

答案 4 :(得分:0)

Strcmp返回值在成功案例中为零,这就是为什么它不会成为真实