当前位置:首页 > 职场指南 > 笔试

笔试题总结

时间:2024-07-12 17:09:34
笔试题总结

笔试题总结

 首先看一下strcpy这个函数:

原型声明:extern char *strcpy(char *dest,char *src);

  头文件:string.h

  功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

  返回指向dest的指针。

* C语言标准库函数strcpy的一种典型的工业级的'最简实现

  * 返回值:

  * 返回目标串的地址。

  * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。

  * 参数:

  * strDeatination

  * 目标串

  * strSource

  * 源串

  ***********************/

  char *strcpy(char *strDestination, const char *strSource);

  {

  assert(strDestination && strSource);

  char *cp=strDestination;

  while(*cp++ = *strSource++);

  return strDestination;

  }

实战一下,下面几个test用于找错:
void test1()
{
char string[10];
char* str1=\"0123456789\";
strcpy(string, str1);
}
答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11],这样最后一个元素可以存储字符串结尾符\\\0\;

void test2()
{
char string[10], str1[10];
for(int I=0; I<10;I++)
{
str1[I] =\a\;
}
strcpy(string, str1);
}
答:strcpy使用错误,strcpy只有遇到字符串末尾的\\\0\才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=\\\0\,这样就正常了。

void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符\\\0\的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。

《笔试题总结.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式