strcpy详解

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)对数组越界把握的敏感度;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值