strcpy详解

来源:互联网 发布:深圳cnc编程招聘 编辑:程序博客网 时间:2024/06/05 05:10

strcpy是标准C库函数。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);

char * strcpy(char * dest, const char * src) // 实现src到dest的复制{  if ((NULL == src) || (NULL == dest)) //判断参数src和dest的有效性  {      return NULL;//or  throw "Invalid argument(s)";       //[2]   }  char *strdest = dest;        //保存目标字符串的首地址  while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下  return strdest;}

所以使用strcpy 需要注意下面几个问题:
1、strcpy只能复制字符串。
2、strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。


下面是关于strcpy的试题:

找错

试题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[i] ='a';     }     strcpy(string, str1); }

试题3:

Void test3(char* str1) {     char string[10];     if(strlen(str1) <= 10)     {         strcpy(string, str1);     } }

解答:
test1: 字符串str1需要11个字节才能存放下(包括末尾的'\0'),而string只有10个字节的空间,strcpy会导致数组越界

test2: 如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分

test3: if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计'\0'所占用的1个字节

剖析:

考查对基本功的掌握:
(1)字符串以'\0'结尾;
(2)对数组越界把握的敏感度;

原创粉丝点击