重解几道华为经典C语言面试题计算机等级考试

文章作者 100test 发表时间 2009:07:19 08:52:37
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  如何应付二级考试中的公共基础知识

  全国计算机等级考试上机考试应试技巧

  1、找错
  void test1()
  {
  char string[10].
  char* str1="0123456789".
  strcpy(string, str1).
  }
  这里string数组越界,因为字符串长度为10,还有一个结束符‘\0’。所以总共有11个字符长度。string数组大小为10,这里越界了。
  PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。
  void test2()
  {
  char string[10], str1[10].
  for(i=0. i<.10.i )
  {
  str1[i] =a.
  }
  strcpy(string, str1).
  }
  这里有一个一眼就能看出的问题,那就是变量i没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在for循环后面应加上str1p[9] = \0.
  PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符‘\0’。
  void test3(char* str1)
  {
  char string[10].
  if(strlen(str1)<.=10)
  {
  strcpy(string, str1).
  }
  }
  这里的问题仍是越界问题。strlen函数得到字符串除结束符外的长度。如果这里是<.=10话,就很明显越界了。
  小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。
  2、找错
  DSN get_SRM_no()
  {
  static int SRM_no.
  int I.
  for(I=0.I<.MAX_SRM.I )
  {
  SRM_no %= MAX_SRM.
  if(MY_SRM.state==IDLE)
  {
  break.
  }
  }
  if(I>.=MAX_SRM)
  return (NULL_SRM).
  else
  return SRM_no.
  }
  这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。
  简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no.如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。
  经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1。

相关文章


如何得到硬盘物理序号计算机等级考试
Delphi中RichEdit的奥妙计算机等级考试
计算机等考二级Java无人使用的语言特性计算机等级考试
技巧:C 查找字符在字符串中出现的次数计算机等级考试
重解几道华为经典C语言面试题计算机等级考试
2009年等考二级Access上机考试考点计算机等级考试
计算机等级考试二级VF模拟试题一及答案解析计算机等级考试
计算机等级考试二级VB模拟试题六及答案解析计算机等级考试
计算机等级考试二级VB模拟试题五及答案解析计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛