为什么这两个字符串在c中不相等

为什么这两个字符串在c中不相等,c,http,parsing,cs50,C,Http,Parsing,Cs50,嘿,伙计们,好的,我写了这段代码,它会检查get请求是否正确,但是在最后一次比较中,它没有给我预期的结果。提前谢谢。问题是在最后一个if语句中,它返回false,而它应该返回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) {

嘿,伙计们,好的,我写了这段代码,它会检查get请求是否正确,但是在最后一次比较中,它没有给我预期的结果。提前谢谢。问题是在最后一个if语句中,它返回false,而它应该返回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");
                }
            }
        }
    }
} 
#包括
#包括
int main()
{
char*string=“GET/cats.html HTTP/1.1\r\n”;
if(strncmp(字符串“GET”,4)==0)
{
printf(“你好”);
if(字符串[4]=='/'))
{
printf(“,\n”);
char*string1=strchr(字符串“.”);
string1=strchr(string1',);
printf(“%s”,string1);
if(string1!=NULL)
{
如果(*string1==“HTTP/1.1\r\n”)
{
printf(“世界”);
}
}
}
}
} 

因为您不是在比较字符串,所以您是在比较指针和字符串

if( strcmp(string1, " HTTP/1.1\r\n") == 0)
适当的比较是:

if(!strcmp(string1," HTTP/1.1\r\n")) {
    ...
}

因为您不是在比较字符串,所以您是在比较指针和字符串

if( strcmp(string1, " HTTP/1.1\r\n") == 0)
适当的比较是:

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)
该行:

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)

预期的输出是什么,您实际得到了什么?它应该打印hello,world,但它在hello处停止,您的编译器应该发出警告。永远不要忽略编译器警告。并启用建议的警告。@islam zidan:
*string1==“HTTP/1.1\r\n”
不是有效的C代码。你的编译器肯定告诉过你这件事。您是否忽略了编译器的诊断消息?预期的输出是什么?您实际得到的是什么?它应该打印hello,world,但在hello处停止,编译器应该发出警告。永远不要忽略编译器警告。并启用建议的警告。@islam zidan:
*string1==“HTTP/1.1\r\n”
不是有效的C代码。你的编译器肯定告诉过你这件事。你刚才忽略了你的编译器的诊断信息吗?非常感谢,我的声誉仍然很低,所以我不能投票,答案将在11分钟内被接受。你把我的“两分钱”交给了你的代表。;)@Serge:“…你正在将指针与字符串进行比较…”。OP在哪里比较指针和字符串<代码>*string1不是一个“字符串指针”。非常感谢,我的声誉仍然很低,所以我不能投票,答案将在11分钟内被接受。你把我的“两分钱”交给了你的代表。;)@Serge:“…你正在将指针与字符串进行比较…”。OP在哪里比较指针和字符串<代码>*string1不是“字符串指针”。