gpt4 book ai didi

CS50 Pset6 错误 405 继续打印 server.c

转载 作者:行者123 更新时间:2023-11-30 15:07:07 24 4
gpt4 key购买 nike

所以我的代码,无论如何,都会返回错误 405(一旦通过了请求行中只有两个空格的测试)。这让我相信我在创建代码以确定“GET”实际上是第一个单词时犯了一个错误。这是我“检查”方法类型是否为“GET”或其任何大写的所有代码。

   int s;
s=0;
int i=0;
for(int q=0; q<strlen(line); q++)
{
if(line[q] == ' ')
s++;
}
if(s!=2)
{
error(400);
return false;
}
if((line[i] != 'g' || line[i] != 'G') || (line[i+1] != 'e' || line[i+1] != 'E') || (line[i+2] != 't' || line[i+2] != 'T')||
(line[i+3] != ' ' ))
{
error(405);
return false;
}

有什么原因这总是返回 false 吗?我已将 int i 初始化为 0

最佳答案

Any reason this would always return false?

原因:

  • if 语句视为:

    if(expression_1 || expression_2 || expression_3 || expression_4)
    //where
    //expression_1 is (line[i] != 'g' || line[i] != 'G')
    //expression_2 is (line[i] != 'e' || line[i] != 'E')
    //expression_3 is (line[i] != 't' || line[i] != 'T')
    //expression_4 is (line[i] != ' ')
  • 让我们将 line 视为 GET

  • 现在,expression_1始终被评估为true,即使line[i] == G code> 因为 line[i] != 'g'true。因此,(line[i] != 'g' || line[i] != 'G')truetrue ||假==真

  • 现在,进一步的表达式不会被计算,因为 || 是一个惰性运算符,并且它会在第一次出现 true 时停止计算,因为 true ||任何 == true

  • 因此,始终输入 if block ,并且始终返回 false

<小时/>

解决方案:

  • 更改代码中的 if :

    if((line[i] != 'g' || line[i] != 'G') || (line[i+1] != 'e' || line[i+1] != 'E') || (line[i+2] != 't' || line[i+2] != 'T') || (line[i+3] != ' '  ))
  • 以下内容:

    if((line[i] != 'g' && line[i] != 'G') || (line[i+1] != 'e' && line[i+1] != 'E') || (line[i+2] != 't' && line[i+2] != 'T') || (line[i+3] != ' '  ))
  • 这里 line[i] != 'g' && line[i] != 'G' 被评估为 false 作为 true && false == false 并检查进一步的表达式,直到遇到 true

  • 如果没有遇到 true 则不会进入 if() block
<小时/>

此外,

  • 作为 @twalberg 已在 comment 中建议,如果您使用 if 语句作为 if( !strncasecmp(line, "get ", 3) ) 通过包含 strings.h头文件

  • 在此处了解有关 strncasemp() 函数的更多信息: click

关于CS50 Pset6 错误 405 继续打印 server.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38512587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com