在C语言中检查字符串的第一个字母

3

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

以下是我尝试过的方法:

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

我称之为:

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

每次都返回false。显然我错过了一些明显的东西,但我还没有能够弄清楚...

4
strcmp比较整个字符串,因此只有在传递的字符串为“/”时才会返回true。您可以尝试使用strncmp或仅比较一个字符(例如 if (str[0] == '/')),而不是一个字符串。 - undefined
@AntonH:为什么不把这个作为一个回答呢? - undefined
@alk 我本来只是想评论为什么它不起作用,但后来编辑了一个解决方案。现在将其作为答案发布... - undefined
啊哇,好的,谢谢。我也尝试过这个,但是我使用的是“/”而不是‘/’。谢谢。不知道为什么当我使用“/”时,它会将str[0]视为指针,而“/”视为整数? - undefined
5个回答

6

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

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

2
你可能想要使用 const char * str - undefined
不知道你使用的是什么操作系统/Shell,但是cd /../命令会将我留在根目录,而不是当前工作目录的上级目录。 - undefined

4

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

您可以考虑使用strncmp

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

或者只比较一个字符:

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

3

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

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

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

如果您要查找的前缀长度超过一个字符,则这个可能会有所帮助。我比得票最多的那个答案更喜欢Fred Foo的答案。

2

strncmp类似,您可以使用memcmp并将要比较的字节数作为参数:

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

不要忘记,返回值$0$表示相等。在您的代码中,在这种情况下返回$0$,这可能不是您想要的结果。

0

strcmp函数在成功的情况下返回值为零,这就是为什么它不会变为true。


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