2

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

这是我尝试过的:

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

我称之为:

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

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

4

5 回答 5

6

无法访问编译器,但我认为这会起作用,因为 C 风格的字符串只是带有终止字符的数组:

int isAbsolute(const char *str){
    return (str[0] == '/');
}
于 2017-09-06T16:45:16.443 回答
3

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

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

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

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

于 2017-09-06T16:47:34.357 回答
2

strcmptrue比较整个字符串,因此只有当您传递的字符串是“/”时,您的函数才会返回。

您可以查看 strncmp :

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

或只比较一个字符:

(if (str[0] == '/')) ...
于 2017-09-06T16:48:16.533 回答
1

类似于strncmp您可以使用memcmpwhich 具有要比较的字节数作为参数:

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

不要忘记返回值 $0$ 意味着相等。在您的代码中,您在这种情况下返回 0,这可能与您的预期不同。

于 2017-09-06T18:01:31.093 回答
0

strcmp 返回值在成功情况下为零,这就是为什么它不会为真

于 2017-09-06T19:33:15.080 回答