一、字符串的strcpy与strncpy函数

  1、编程实现strcpy函数(笔试很容易考到)

     要求: 

     原型:char *stpcpy(char *strDest,char *strSrc);

     头文件:#include <string.h>

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

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

     返回指向dest结尾处字符(NULL)的指针。

    strcpy的代码实现:

char * strCpy(char * strDest,const char * strSrc)   //[1]
{
  //函数assert的头文件为#include<assert.h>
  assert((strDest != NULL)&&(strSrc != NULL)); //[2]   char * strDestCopy=strDest; //[3]
  while ((*strDest++ = *strSrc++) != '\0'); //[4]   return strDestCopy; //[5]
}

  代码的分析:

      代码[1]:可能会忘记代码中的参数列表以及返回值 

        代码[2]:很多人会忘记对字符串指针的检查,这一部分能体现程序员的严谨性,主要体现在一下三点,

           a、不检查指针的有效性,说明答题者不注重代码的健壮性 

           b、检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识  

           c、检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处

        代码2也可以写:  if ((strDest == NULL)||(strSrc == NULL))
                           throw "Invalid argument(s)"; //throw为抛出异常

      代码[3]: 忘记保存原始的strDest值,说明答题者逻辑思维不严密。  

      代码[4]:没有什么硬性的要求,这部分功能比较容易实现,考虑到边界问题就可以了

      代码[5]:返回值是为了链式调用(一般情况下放回值是字符串类型的指针都是为了链式调用)

  

  2、编程实现strncpy函数

     要求:

      原型:    char *strncpy(char *strDest, char *strSrc, int n);

      头文件:#include <string.h>

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

      说明:

           1、如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。

        2、如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

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

      返回值:指向dest的指针。

   strncpy代码实现:  

 char * my_strncpy(char *strDest, const char *strSrc, int num)
 {
assert((strDest != NULL) && (strSrc != NULL));
//if (strDest == NULL || strSrc == NULL) return NULL;   //保存目标字符串的首地址
 char *strDestcopy = strDest;
  while ((num--)&&(*strDest++ = *strSrc++) != '\0');
  //如果num大于strSrc的字符个数,将自动补'\0'
 if (num > )
 {
  while(--num)
 {
 *strDest++ = '\0';
 }
 }
 return strDestcopy;
}

     代码分析:

        1、代码strncpy与代码strcpy其实相差不大,

        2、需要考虑到,如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

C语言 - strcpy和strncpy的编程实现及总结的更多相关文章

  1. strcpy、strncpy与memcpy的区别与使用方法

    strcpy.strncpy.memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别.使用时该注意什么还是有必要说下的. 本文参考<C 标准库>编写. 一.函 ...

  2. C语言与VT100控制码编程

    C语言与VT100控制码编程 声明: . 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; . 本文在vim中编辑,请尽量是用vim进 ...

  3. R语言基于S4的面向对象编程

    前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系 ...

  4. strcpy、strncpy、memcpy的区别

    一.strcpy.strncpy区别 struct gpInfo { char gpcode[9]; char gpName[50]; }; string gpstr = "SZ000001 ...

  5. Go语言面组合式向对象编程基础总结

    转自:http://blog.csdn.net/yue7603835/article/details/44282823 Go语言的面向对象编程简单而干净,通过非侵入式接口模型,否定了C/C++ Jav ...

  6. [置顶] strcpy()与strncpy()的区别

    头文件:#include <string.h> strcpy() 函数用来复制字符串,其原型为: char *strcpy(char *dest, const char *src); [参 ...

  7. C语言控制台窗体图形界面编程(总结)

    本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...

  8. Python语言基础07-面向对象编程基础

    本文收录在Python从入门到精通系列文章系列 1. 了解面对对象编程 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编 ...

  9. C语言与汇编的嵌入式编程:求100以内素数

    写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...

随机推荐

  1. # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)

    「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...

  2. redis存储数据

    redis存储结构--5种 RedisTemplate访问Redis数据结构(一)--String https://blog.csdn.net/qq_25135655/article/details/ ...

  3. 【原创】运维基础之Nginx(3)location和rewrite

    nginx location =:精确匹配(必须全部相等) ~:大小写敏感,正则匹配 ~*:忽略大小写,正则匹配 ^~:只需匹配uri部分,精确匹配 @:内部服务跳转,精确匹配 优先级: Exact ...

  4. nginx相关知识点

    1.nginx -V 可以查看nginx的安装目录等目录信息 2.nginx -v 查看版本 3.路径 /usr/local/etc/nginx/nginx.conf (配置文件路径) /usr/lo ...

  5. CentOS7部署kettle

    去官网下载kettle, 或者百度网盘下载(nnnk),解压到目录/opt/service/, 解压后的目录是data-integration kettle需要java环境才能运行,因此要安装Java ...

  6. wex5打包详解

    1.模式选择 模式一:主要针对是简单的运用,进行智能更新,也就是说即使服务器更新了,客户端也不会立即更新,不适合产品类型的APP. 模式二:服务器资源更新了,客户端也会立即更新. 模式三:调试模式. ...

  7. Express multer 文件上传

    npm multer 文件上传 Express app 范本就不写了,仅记录一下上传部分的代码. const fs = require('fs'); const express = require(' ...

  8. openlayers之点,线,面(以城市,河流,省份为例,分别对应点线面)

    kpst._this这里指向初始化的map // 设置标注样式函数 function createStyle(name) { // 河流style var riverStyle = new Style ...

  9. 第96:SVM简介与简单应用

    详细推到见:https://blog.csdn.net/v_july_v/article/details/7624837 python实现方式:

  10. elasticsearch设置执行脚本并添加开机启动 (转)

    elasticsearch设置执行脚本并添加开机启动 在/etc/init.d目录下新建文件elasticsearch #!/bin/sh #chkconfig: 2345 80 05 #descri ...