找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 161|回复: 1

关于strcpy的改错题

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-10-22 21:28:55 | 显示全部楼层 |阅读模式

试题1:   
Void test1()
{
    char string[10];
    char* str1="0123456789";     strcpy(string, str1);
}  
试题2:   
Void test2()
{
    char string[10], str1[10];     
     for(I=0; I<10;I++)     
     {
        str1 =&#39;a&#39;;   
     }
    strcpy(string, str1);
}  
试题3:   
Void test3(char* str1)
{
    char string[10];
    if(strlen(str1) <= 10)     
    {
        strcpy(string, str1);     
    }  
}

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-10-22 21:46:31 | 显示全部楼层
剖析:&#160;&#160;
考查对基本功的掌握:&#160;(1)字符串以&#39;\0&#39;结尾;&#160;
(2)对数组越界把握的敏感度;&#160;
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:&#160;
&#160;2分&#160;
void&#160;strcpy(&#160;char&#160;*strDest,&#160;char&#160;*strSrc&#160;)&#160;
{&#160;
&#160;&#160;&#160;&#160;while(&#160;(*strDest++&#160;=&#160;*&#160;strSrc++)&#160;!=&#160;&#39;\0&#39;&#160;);&#160;
}&#160;&#160;
4分&#160;
void&#160;strcpy(&#160;char&#160;*strDest,&#160;const&#160;char&#160;*strSrc&#160;)&#160;//将源字符串加const,表明其为输入参数,加2分&#160;
{&#160;
&#160;&#160;&#160;&#160;while(&#160;(*strDest++&#160;=&#160;*&#160;strSrc++)&#160;!=&#160;&#39;\0&#39;&#160;);&#160;
}&#160;&#160;
7分&#160;
void&#160;strcpy(char&#160;*strDest,&#160;const&#160;char&#160;*strSrc)&#160;
{&#160;
&#160;&#160;&#160;//对源地址和目的地址加非0断言,加3分&#160;
&#160;&#160;&#160;assert(&#160;(strDest&#160;!=&#160;NULL)&#160;&&&#160;(strSrc&#160;!=&#160;NULL)&#160;);&#160;&#160;&#160;&#160;
   while(&#160;(*strDest++&#160;=&#160;*&#160;strSrc++)&#160;!=&#160;&#39;\0&#39;&#160;);&#160;
}&#160;&#160;
10分&#160;
//为了实现链式操作,将目的地址返回,加3分!&#160;&#160;
char&#160;*&#160;strcpy(&#160;char&#160;*strDest,&#160;const&#160;char&#160;*strSrc&#160;)&#160;
{&#160;
&#160;&#160;assert(&#160;(strDest&#160;!=&#160;NULL)&#160;&&&#160;(strSrc&#160;!=&#160;NULL)&#160;);&#160;&#160;&#160;
  char&#160;*address&#160;=&#160;strDest;&#160;
&#160;&#160;while(&#160;(*strDest++&#160;=&#160;*&#160;strSrc++)&#160;!=&#160;&#39;\0&#39;&#160;);&#160;&#160;&#160;&#160;
   return&#160;address;&#160;
}
(4)对strlen的掌握,它没有包括字符串末尾的&#39;\0&#39;。&#160;
读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为&#160;&#160;
int&#160;strlen(&#160;const&#160;char&#160;*str&#160;)&#160;//输入参数const&#160;&#160;
{&#160;
&#160;    assert(&#160;strt&#160;!=&#160;NULL&#160;);&#160;//断言字符串地址非0&#160;&#160;
&#160;     int&#160;len;&#160;
&#160;     while(&#160;(*str++)&#160;!=&#160;&#39;\0&#39;&#160;)&#160;&#160;
      {&#160;
&#160;&#160;            len++;&#160;&#160;
       }&#160;
&#160;     return&#160;len;&#160;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 04:40 , Processed in 0.075993 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表