一、字符串的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 > 0){while(--num){*strDest++ = '\0';}}return strDestcopy;}

     代码分析:

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

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

转载于:https://www.cnblogs.com/goul/p/9569477.html

C语言 - strcpy和strncpy的编程实现及总结相关推荐

  1. c语言strncpy源码,C语言 - strcpy和strncpy的编程实现及总结

    一.字符串的strcpy与strncpy函数 1.编程实现strcpy函数(笔试很容易考到) 要求: 原型:char *stpcpy(char *strDest,char *strSrc); 头文件: ...

  2. C语言strcpy、strncpy函数是否会复制‘\0‘结束符

    1.首先看看strcpy函数的原型 /* strcpy函数原型*/ char *strcpy(char *est,const char *src) {assert((dest!=NULL)&& ...

  3. c语言strcpy与strncpy区别,strcpy与strncpy的区别

    我们先来看看strcpy, 下面的程序没有问题: #include using namespace std; int main() { char str[4] = {0}; char *p = &qu ...

  4. C语言——数组、字符串处理函数、strlen、strcpy和strncpy、strcat和strncat、strcmp和strncmp

    目录 一.数组 1.定义:类型 数组名[元素个数] 2.数组不能动态定义 3.如何访问数组中的元素:数组名[下标] 4.循环与数组的关系 5.数组的初始化 二.C99标准中的数组 三.字符串处理函数 ...

  5. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

  6. stpcpy和stpncpy用法 strcpy和strncpy用法

    文章目录 strncpy, strncpy_s参考文档用法 strcpy, strncpy实例 strcpy, strncpy用法举例 运行结果 stpcpy()和stpncpy()用法上的区别(C语 ...

  7. C语言 strcpy 和 strcpy_s 函数区别 - C语言零基础入门教程

    目录 一.strcpy_s 函数/strcpy 函数简介 1.strcpy 函数语法 2.strcpy_s 函数语法 二.strcpy/strcpy_s 函数实战 三.猜你喜欢 零基础 C/C++ 学 ...

  8. strcpy和strncpy用法和区别

    1. strcpy函数: 顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到 ...

  9. c语言strcpy两字符串长度不同,C语言 strcpy和memcpy区别详细介绍

    C语言 strcpy和memcpy区别详细介绍 PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的代码Time Limit Exceed难过)于是百度高效算法,本篇作为预 ...

最新文章

  1. php源码安全加密之PHP混淆算法.
  2. js 浅拷贝直接赋值_js的浅拷贝和深拷贝的简单理解和使用方法
  3. css3关键帧动画以及兼容性策略
  4. 强烈推荐Bulletproof Ajax 中文版
  5. appium desktop 1.7 byName不能用,重写
  6. intercontenient hotels
  7. 使用etop查看系统中进程信息
  8. bootstrap模态框 遮挡_Bootstrap Modal遮罩弹出层
  9. CentOS 5 上安装git
  10. 经常在命令提示符中所使用的命令
  11. (3)机器学习_逻辑模型_决策树
  12. Filenet公布首批候选自治社区
  13. 使用nslookup查看邮箱信息
  14. android中的各种 Category
  15. MFC---List Control的用法总结
  16. linux centos 恢复 还原 备份 Snapper 快照说明
  17. 如何提升客户的信任,实现与客户的连接,带动业绩的转变
  18. Windows10家庭版 提升管理员权限
  19. C++输入一行数字存放到数组
  20. SpringBoot使用Druid监控SQL

热门文章

  1. 每日一题(43)—— 数组越界
  2. git gui怎么拉取项目代码_Git可视化极简易教程 — Git GUI使用方法
  3. Nodejs之http模块详解
  4. Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)
  5. LeetCode 2044. 统计按位或能得到最大值的子集数目(状态压缩DP)
  6. LeetCode 838. 推多米诺(模拟)
  7. LeetCode MySQL 1549. The Most Recent Orders for Each Product
  8. 程序员面试金典 - 面试题 17.18. 最短超串(双指针+哈希)
  9. 剑指Offer - 面试题66. 构建乘积数组(正反遍历)
  10. oracle磁盘组故障组的概念,ASM中理解的问题大家帮忙!!(asm的外部冗余,为什么也有故障组呢?)...