почему эти две строки не равны в c [дубликаты]

эй, ребята, хорошо, я написал этот код, который проверял бы правильность запроса на получение, но при последнем сравнении он не дает мне ожидаемого результата, спасибо заранее, проблема в последнем операторе 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");
                }
            }
        }
    }
} 

person islam zidan    schedule 08.09.2016    source источник
comment
Каков ожидаемый результат и что вы получаете на самом деле?   -  person Sourav Ghosh    schedule 08.09.2016
comment
он должен напечатать привет, мир, но останавливается на привет,   -  person islam zidan    schedule 08.09.2016
comment
Ваш компилятор должен предупредить. Никогда не игнорируйте предупреждения компилятора. И включите рекомендуемые предупреждения.   -  person too honest for this site    schedule 08.09.2016
comment
@islam zidan: *string1==" HTTP/1.1\r\n" недопустимый код C. Ваш компилятор, несомненно, сказал вам об этом. Вы только что проигнорировали диагностические сообщения вашего компилятора?   -  person AnT    schedule 08.09.2016


Ответы (2)


Линия:

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)
person R Sahu    schedule 08.09.2016

Поскольку вы сравниваете не строки, вы сравниваете указатели со строками.

Правильным сравнением будет:

if(!strcmp(string1," HTTP/1.1\r\n")) {
    ...
}
person Serge    schedule 08.09.2016
comment
это сработало, большое спасибо, моя репутация все еще низкая, поэтому я не могу голосовать, и ответ будет принят через 11 минут. - person islam zidan; 08.09.2016
comment
Вы получили мои два цента в вашей репутации. ;) - person Serge; 08.09.2016
comment
@Serge: ... вы сравниваете указатели со строками .... Где OP сравнивает указатели со строками? *string1 не является указателем на строку. - person AnT; 08.09.2016