C语言 - strcpy和strncpy的编程实现及总结
一、字符串的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的编程实现及总结相关推荐
- c语言strncpy源码,C语言 - strcpy和strncpy的编程实现及总结
一.字符串的strcpy与strncpy函数 1.编程实现strcpy函数(笔试很容易考到) 要求: 原型:char *stpcpy(char *strDest,char *strSrc); 头文件: ...
- C语言strcpy、strncpy函数是否会复制‘\0‘结束符
1.首先看看strcpy函数的原型 /* strcpy函数原型*/ char *strcpy(char *est,const char *src) {assert((dest!=NULL)&& ...
- c语言strcpy与strncpy区别,strcpy与strncpy的区别
我们先来看看strcpy, 下面的程序没有问题: #include using namespace std; int main() { char str[4] = {0}; char *p = &qu ...
- C语言——数组、字符串处理函数、strlen、strcpy和strncpy、strcat和strncat、strcmp和strncmp
目录 一.数组 1.定义:类型 数组名[元素个数] 2.数组不能动态定义 3.如何访问数组中的元素:数组名[下标] 4.循环与数组的关系 5.数组的初始化 二.C99标准中的数组 三.字符串处理函数 ...
- c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用
详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...
- stpcpy和stpncpy用法 strcpy和strncpy用法
文章目录 strncpy, strncpy_s参考文档用法 strcpy, strncpy实例 strcpy, strncpy用法举例 运行结果 stpcpy()和stpncpy()用法上的区别(C语 ...
- C语言 strcpy 和 strcpy_s 函数区别 - C语言零基础入门教程
目录 一.strcpy_s 函数/strcpy 函数简介 1.strcpy 函数语法 2.strcpy_s 函数语法 二.strcpy/strcpy_s 函数实战 三.猜你喜欢 零基础 C/C++ 学 ...
- strcpy和strncpy用法和区别
1. strcpy函数: 顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到 ...
- c语言strcpy两字符串长度不同,C语言 strcpy和memcpy区别详细介绍
C语言 strcpy和memcpy区别详细介绍 PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的代码Time Limit Exceed难过)于是百度高效算法,本篇作为预 ...
最新文章
- php源码安全加密之PHP混淆算法.
- js 浅拷贝直接赋值_js的浅拷贝和深拷贝的简单理解和使用方法
- css3关键帧动画以及兼容性策略
- 强烈推荐Bulletproof Ajax 中文版
- appium desktop 1.7 byName不能用,重写
- intercontenient hotels
- 使用etop查看系统中进程信息
- bootstrap模态框 遮挡_Bootstrap Modal遮罩弹出层
- CentOS 5 上安装git
- 经常在命令提示符中所使用的命令
- (3)机器学习_逻辑模型_决策树
- Filenet公布首批候选自治社区
- 使用nslookup查看邮箱信息
- android中的各种 Category
- MFC---List Control的用法总结
- linux centos 恢复 还原 备份 Snapper 快照说明
- 如何提升客户的信任,实现与客户的连接,带动业绩的转变
- Windows10家庭版 提升管理员权限
- C++输入一行数字存放到数组
- SpringBoot使用Druid监控SQL
热门文章
- 每日一题(43)—— 数组越界
- git gui怎么拉取项目代码_Git可视化极简易教程 — Git GUI使用方法
- Nodejs之http模块详解
- Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)
- LeetCode 2044. 统计按位或能得到最大值的子集数目(状态压缩DP)
- LeetCode 838. 推多米诺(模拟)
- LeetCode MySQL 1549. The Most Recent Orders for Each Product
- 程序员面试金典 - 面试题 17.18. 最短超串(双指针+哈希)
- 剑指Offer - 面试题66. 构建乘积数组(正反遍历)
- oracle磁盘组故障组的概念,ASM中理解的问题大家帮忙!!(asm的外部冗余,为什么也有故障组呢?)...