家庭作业补充

2.71题目(具体在书上P83)(1星)

  • 问题A:这段代码错在哪里?
    答:得到的结果是unsigned,而并非扩展为signed的结果。 

  • 问题B:给出函数的正确实现。只能使用左右移和一个减法。
    答:使用int,将待抽取字节左移到最高字节,再右移到最低字节即可。

           int xbyte(unsigned word, int bytenum)  
           {       
                  int ret = word << ((3 - bytenum)<<3);       
                  return ret >> 24;   
           }

2.87题目(书上P88)(2星)

886717-20161221215000167-854182231.jpg

7.8(1星)

题目:在此题中,REF(x,i)-->DEF(x,k)表示链接器将任意对模块i中符号x的引用于模块k中符号x的定义相关联。在下面每个例子中,用这种符号来说明链接器是如何解析在每个模块中有多重定义的引用的。如果出现链接时错误(规则1),写“ERROR”。如果链接器从定义中任意选择一个(规则3),那么写“UNKNOWN”。

答:

A.  
a)REF(main.1)-->DEF(main.1)
b)REF(main.2)-->DEF(main.2) 

B. UNKNOWN 

C. ERROR

11.10(2星)

  • HTML文件: 

      <html> 
      <body> 
      <form name="input" action="cgi-bin/adder" method="get">
      Num1: <input type="text" name="num1"/>  <br/>   
      Num2: <input type="text" name="num2"/>  <br/>   
      <input type="submit" value="Submit"/>
      </form> 
      </body> 
      </html> 

    因为提交的表单里面有参数名字(num1=x&num2=y),所以要修改相应的adder.c:
     
    int parseNum(char *s) 

        int i = strlen(s) - 1; 
        while(i>0 && s[i-1]>='0'&&s[i-1]<='9' )         
     i--; 
        return atoi(s+i); 
    }  

          int main(void) {
              char *buf, *p; 
                  char arg1[MAXLINE], arg2[MAXLINE], content[MAXLINE];     
              int n1=0, n2=0;  
    
          /* Extract the two arguments */ 
          if ((buf = getenv("QUERY_STRING")) != NULL) {         
              p = strchr(buf, '&'); 
              *p = 0; 
              strcpy(arg1, buf);
              strcpy(arg2, p+1);
              n1 = parseNum(arg1);
              n2 = parseNum(arg2);
           }
        
          /* Make the response body */ 
          sprintf(content, "Welcome to add.com: ");     
          sprintf(content, "%sTHE Internet addition portal.\r\n<p>", content); 
              sprintf(content, "%sThe answer is: %d + %d = %d\r\n<p>",content, n1, n2, n1 + n2); 
          sprintf(content, "%sThanks for visiting!\r\n", content);  
    
          /* Generate the HTTP response */ 
          printf("Content-length: %d\r\n", (int)strlen(content));     
          printf("Content-type: text/html\r\n\r\n");
          printf("%s", content);
          fflush(stdout); 
          exit(0); 
      }  

11.11(2星)

题目:扩展TINY,以支持HTTP HEAD方法。使用TELNET作为Web客户端来验证你的工作。

想到的办法就是定义一个变量rmtd,表示请求的方法。 
在client_error,serve_static和serve_dynamic中添加一个参数mtd,表示方法。如果mtd为HEAD,就只打印头部。 结果如下:
886717-20161221215148339-1389400289.png

转载于:https://www.cnblogs.com/huangyaqi/p/6209238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值