我正在用C语言编写一个非常简单的函数,用于检查字符串是绝对路径还是相对路径。无论我尝试什么,它总是返回false。
以下是我尝试过的方法:
int isAbsolute(char *str){
if(strcmp(str,"/")){
return 1;
}
return 0;
}
我称之为:
printf("%d\n", isAbsolute("/"));
每次都返回false。显然我错过了一些明显的东西,但我还没有能够弄清楚...
没有访问编译器的权限,但我认为这将起作用,因为C风格的字符串只是带有终止字符的数组:
int isAbsolute(const char *str){
return (str[0] == '/');
}
const char * str
。 - undefinedcd /../
命令会将我留在根目录,而不是当前工作目录的上级目录。 - undefinedstrcmp
比较整个字符串,因此您的函数只有在传递的字符串是“/”时才会返回true
。
您可以考虑使用strncmp
:
if(strncmp(str,"/", 1)) ...
或者只比较一个字符:
(if (str[0] == '/')) ...
正如所指出的那样,strcmp
只有在比较的字符串长度相同时才匹配。
要比较字符串前面的单个字符,你可以直接这样做:
int isAbsolute(const char *str) {
return (str[0] == '/');
}
与strncmp
类似,您可以使用memcmp
并将要比较的字节数作为参数:
int isAbsolute(const char *str){
if (0 == memcmp(str, "/", 1){
return 1;
} else {
return 0;
}
}
strcmp函数在成功的情况下返回值为零,这就是为什么它不会变为true。
strcmp
比较整个字符串,因此只有在传递的字符串为“/”时才会返回true。您可以尝试使用strncmp
或仅比较一个字符(例如if (str[0] == '/')
),而不是一个字符串。 - undefined