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

时间:2016-09-08 18:07:21

标签: c http parsing cs50

嘿家伙好吧我写了这段代码,它会检查一个get请求是否正确,但在最后的比较中它并没有给我预期的结果,谢谢你提前问题是在最后一个if语句中它返回false时它应该返回真实

#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");
                }
            }
        }
    }
} 

2 个答案:

答案 0 :(得分:4)

该行:

if(*string1==" HTTP/1.1\r\n")

不会比较两个字符串是否相等。

string1的类型为char*。因此,*string1的类型为char

因此,您要将charchar const*进行比较,这远远超出您的预期。

即使使用

if(string1==" HTTP/1.1\r\n")

不会给你预期的结果,因为它会比较两个指针的相等性,这个用例一直都是假的。

您需要使用的是用于比较两个字符串的库函数。

if( strcmp(string1, " HTTP/1.1\r\n") == 0)

答案 1 :(得分:1)

因为您没有比较字符串,所以您要将指针与字符串进行比较。

正确的比较是:

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