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