为什么这两个字符串在c中不相等
why are these two strings not equal in c
大家好,我写了这段代码,它会检查 get 请求是否正确,但在最后一次比较时,它没有给我预期的结果,谢谢你,问题出在最后一个 if 语句中 return false 应该 return true
#include <stdio.h>
#include <string.h>
int main()
{
char* string="GET /cats.html HTTP/1.1\r\n";
if(strncmp(string,"GET ",4)==0)
{
printf("hello");
if(string[4]=='/')
{
printf(",\n");
char* string1=strchr(string,'.');
string1=strchr(string1,' ');
printf("%s",string1);
if(string1!=NULL)
{
if(*string1==" HTTP/1.1\r\n")
{
printf("world\n");
}
}
}
}
}
因为您不是在比较字符串,而是在比较指向字符串的指针。
正确的比较应该是:
if(!strcmp(string1," HTTP/1.1\r\n")) {
...
}
行:
if(*string1==" HTTP/1.1\r\n")
不比较两个字符串是否相等。
string1
的类型是 char*
。因此 *string1
的类型是 char
.
因此,您将 char
与 char const*
进行比较,这与您的预期相去甚远。
甚至使用
if(string1==" HTTP/1.1\r\n")
不会给你预期的结果,因为它会比较两个指针是否相等,这在这个用例中总是错误的。
你需要用到的是比较两个字符串的库函数
if( strcmp(string1, " HTTP/1.1\r\n") == 0)
大家好,我写了这段代码,它会检查 get 请求是否正确,但在最后一次比较时,它没有给我预期的结果,谢谢你,问题出在最后一个 if 语句中 return false 应该 return true
#include <stdio.h>
#include <string.h>
int main()
{
char* string="GET /cats.html HTTP/1.1\r\n";
if(strncmp(string,"GET ",4)==0)
{
printf("hello");
if(string[4]=='/')
{
printf(",\n");
char* string1=strchr(string,'.');
string1=strchr(string1,' ');
printf("%s",string1);
if(string1!=NULL)
{
if(*string1==" HTTP/1.1\r\n")
{
printf("world\n");
}
}
}
}
}
因为您不是在比较字符串,而是在比较指向字符串的指针。
正确的比较应该是:
if(!strcmp(string1," HTTP/1.1\r\n")) {
...
}
行:
if(*string1==" HTTP/1.1\r\n")
不比较两个字符串是否相等。
string1
的类型是 char*
。因此 *string1
的类型是 char
.
因此,您将 char
与 char const*
进行比较,这与您的预期相去甚远。
甚至使用
if(string1==" HTTP/1.1\r\n")
不会给你预期的结果,因为它会比较两个指针是否相等,这在这个用例中总是错误的。
你需要用到的是比较两个字符串的库函数
if( strcmp(string1, " HTTP/1.1\r\n") == 0)