不调用库函数,实现strcpy() 函数

[指针八]有关指针的面试题 有关指针的经典面试题           C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的解析一下指针的有关笔试,面试题.所有题目来源网络,分析是我写的... 0.预备知识,最基础的指针 其实最基础的指针也就应该如下面代码: int a; 阅读详情

这是一道出现频率最高的面试题,考查的应聘人员很多方面的知识。本人在面试时也遇到过此题,但从这篇文章所讲的角度来看,完成的不太理想。特将此文章转载过来, 以备后用。

http://www.cppblog.com/lizhongxu2008/archive/2009/02/11/73456.html

文章如下:


出现频率最高的笔试题

    题目:
    已知strcpy函数的原型是:
        char * strcpy(char * strDest,const char * strSrc);
    1.不调用库函数,实现strcpy函数。
    2.解释为什么要返回char *。

    解说:
    1.strcpy的实现代码
       

 char * strcpy(char * strDest,const char * strSrc)
    {
        if ((strDest==NULL)||(strSrc==NULL)) //[1]
                throw "Invalid argument(s)"; //[2]
        char * strDestCopy=strDest;  //[3]
        while ((*strDest++=*strSrc++)!='/0'); //[4]
        return strDestCopy;
    }


    错误的做法:
    [1]
    (A)不检查指针的有效性,说明答题者不注重代码的健壮性。
    (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false三个关键字以提供更安全的条件表达式。
    (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。
    [2]
    (A)return new string("Invalid argument(s)");,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。
    (B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。
    [3]
    (A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。
    [4]
    (A)循环写成while (*strDest++=*strSrc++);,同[1](B)。
    (B)循环写成while (*strSrc!='/0') *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上'/0'。

    2.返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。
    链式表达式的形式如:
        int iLength=strlen(strcpy(strA,strB));
    又如:
        char * strA=strcpy(new char[10],strB);
    返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。

 

 

学习笔记——strstr函数的C语言实现,不调用库函数 不调用库函数,用C语言实现库函数strstr的功能。 阅读详情

相关推荐

不使用库函数编写strcpy、strlen、strcat、strcmp

1、strcpy #include <stdio.h> #define M 10 #define N 20 int main() { char str1[M]={0}; char str2[N]={0}; //实现字符串的拷贝 //思想:1 遍历字符串str1,将str2的字符串替换到str1上 //2 在字符串尾部添加'\0' printf("输入两个字符串:\n"); gets(str1); gets(str2); printf("before:str1=%s\

zhai_mu_mu666的博客 1085

出现频率最高的笔试题

                          出现频率最高的笔试题    关键字:C++,strcpy,字符串,复制,拷贝,copy,笔试,试题    题目:    已知strcpy函数的原型是:        char * strcpy(char * strDest,const char * strSrc);    1.不调用库函数,实现strcpy函数。    2.解释为什么要返

cphj的专栏 2046

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 625

编程题四

1、编写内存拷贝函数,不用库函数 函数原型:void* memcpy(void *pvTo, const void *pvFrom, size_t size) 答: void my_memcpy(void *dest, const void *src, size_t size) { assert( dest !=NULL);//判断传入的是否为空 assert(src !=NULL);

BrotherJing8023的博客 539

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7506

优快云 付费专栏连载第 3 篇|Cadence Allegro 8 层板布局实战教程:RK3568 硬件模块化分区布局,DDR4 内存约束区域设置、布局禁忌避坑指南

本文是 RK3568 8 层板高速 PCB 设计实战专栏的第 3 篇,聚焦 DDR4 布局阶段的核心方法论与 Allegro 实操。文章从布局前 6 项前置检查清单入手,系统讲解模块化分区布局的五大黄金原则,并给出 160mm×100mm 样板的 5 大功能分区实战案例。随后以图文步骤演示如何在 Allegro 中创建 ROOM_DDR4 与 ROOM_CPU 约束区域,并强调 Hard Room 硬约束的强制校验作用。

weixin_44520581的博客 1734

IT公司面试题(五)

1.设一棵完全二叉树有700个结点,则在该二叉树中有多少个叶子结点如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。  可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n= n0+n1+n2(其中n为完全二叉树的结...

weixin_33909059的博客 215

OpenFeign整合Sentinel实现熔断降级

常用于实现熔断降级的框架有Hystrix、Sentinel,我们常说的Spring Cloud项目说的其实是Spring Cloud Netflix,Hystrix以及前面学习过的Ribbon都是Netflix系的家族成员,所以使用Hystrix可以非常简单的与当前项目中使用到的OpenFeign、Ribbon整合,但笔者并没有选择Hystrix,而是选择阿里系的Sentinel。 为什么选择Sentinel而不是Hystrix?从接入简单考虑可能选择Hystrix是不错的选择,但笔者对Hyst...

吴就业 6718

不调用库函数模拟实现strlen()、strcpy()、strcat()、memcpy()

【代码】不调用库函数模拟实现strlen()、strcpy()、strcat()、memcpy()

weixin_44555799的博客 417

异步处理优化:多线程线程池与消息队列的选择与应用

本文讨论了两种常见的异步处理方式:多线程线程池和消息队列(MQ)。通过将非核心逻辑异步化,可以提升系统的性能和响应速度。多线程线程池适用于本地并发任务,适合需要快速响应的场景,但无法处理跨服务任务。消息队列则适用于分布式系统,能够解耦服务并保证任务的可靠性和顺序性,适合处理高并发和高可靠性要求的任务。文章提供了实际代码示例,帮助开发者根据业务需求选择合适的异步处理方式。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

Git下载与安装

一、Git下载 二、Git安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 6万+

不调用C/C++库函数实现strcpy函数

前几天看关于C语言的书看到了 特别整理一下 strcpy 函数的原型 char * strcpy (char *strDest, const char *strSrc);  strDest是目的字符串  strSrc是源字符串   实现的代码如下:   char * strcpy (char *strDest, const char *strSrc) {            as

LQ_14777的专栏 1399

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

不调用库函数,实现strcpy函数

#include using namespace std; char *strcpy(char *strDest, const char *strSrc) {      if(strDest == NULL || strSrc == NULL)      return NULL;      if(strDest == strSrc)      return strDest;

466

excel 如何自动调整行间距 vba

EXCEL是一个非常使用的软件,虽然我们平时仅使用他做一些报表,仅此而已;我在工作中,由于很懒,不愿意做考试重复的工作,就想着使用vba的宏来完成重复的工作,这样就能省出一部分的时间来了。本人不喜欢在博客里面写以下教程类的东西,我的理念是将工作中的痛点的解决办法分享出来,以解决问题为主。

sixtome 1316

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

字符串函数之strlen() , strcpy() 的模拟实现

1. strlen()函数strlen()函数用于统计字符串的长度。直到碰到第一个字符串结束符’\0’为止。利用库函数实现 接下来我们来模拟实现一下strlen()函数2. strcpy()函数作用:把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间。利用库函数实现 接下来我们自己模拟实现该函数的功能其中,用 char * 作为函数返回值类型,是方便实现链式访问。3.

time的博客 682

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

小白C语言编程实战(20):实现strcpy()函数

这是《小白C语言编程实战》系列的第20篇。 用C语言实现自己的strcpy()函数。

编程架构三分天下:分层、分治、分时序。 965

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

不调用库函数实现strcpy

题目:   已知strcpy函数的原型是:   char * strcpy(char * strDest,const char * strSrc);   1.不调用 库函数 ,实现strcpy函数。   2.解释为什么要返回char *。 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) {   char * strDestCopy=strDest; //[3]   if ((strDest==NULL)||(strSrc=

kangxiansen的博客 2952

模拟strcpy库函数的实现(超详细)

这一篇,带你了解到完全掌握strcpy函数!

m0_70088010的博客 6765

不调用库函数实现strcpy的功能

不调用库函数实现strcpy的功能 strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc); 不调用任何库函数实现strcpy的功能 1 // realize strcpy function ...

766

【C语言】strcpy函数的超细节详解(什么是strcpy,如何模拟实现strcpy?)

strcpy函数是C语言中的字符串复制函数。

weixin_45031801的博客 3万+

模拟实现string库函数下字符串拷贝函数strcpy()

今天来模拟实现strcpy()函数,该函数所实现的功能是拷贝字符串 先来分析一下:字符串的拷贝不能使用‘=’直接赋给,而需要调用函数来进行逐个字节的拷贝,函数参数应为两个char类型的指针 下面是我写的初稿: 运行起来没什么问题,但是从软件工程的角度来看,该函数的程序健壮性太差,在使用中如果传给_Source为NULL时函数该如何处理?那么就有了以下函数: ...

博客小站 2116

详细介绍五种常用字符串库函数 以及对库函数的模拟实现

本文介绍了strlen.strcpy.strcmp.strcat.strstr五大字符串库函数及使用自定义函数模拟实现这五个字符串库函数.学会使用字符串库函数,在处理字符串时会事半功倍...

记录并分享学习编程时的知识点... 1589

字符和字符串的库函数模拟与实现

字符函数和字符串函数的模拟和实现

weixin_74967884的博客 1377

C语言【库函数与自定义函数】详解

介绍C语言中的库函数及自定义函数

m0_70980326的博客 9253
上一篇: 链表的逆置和链表的合并代码实现
下一篇: 互联网创业的葵花宝典
General1982
博客等级 码龄19年 14粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值