strcpy,strncpy,memcpy,memmove
❤️强烈推荐人工智能学习网站❤️
这4个字符串处理函数是我们经常用到的,下面我们来了解释一下它们之间的区别。
strcpy:只用于字符串的复制,以\0为结束符,且\0也一并拷贝过去。不需要在末尾加上\0。
#include<stdio.h>
#include <string.h>int main()
{char str1[10];char str2[10] = "abcefg";strcpy(str1,str2);printf("%s\n",str1);return 0;
}
打印:abcefg
strncpy:只用于字符串的复制,但可以指定长度,以\0为结束符。这里要值得注意的是,遇到\0立即结束复制,不管复制字符的个数是否达到指定长度。当复制长度小于被复制字符串长度时,要注意手动加上\0。
#include<stdio.h>
#include<string.h>int main()
{char str1[30];char str2[30] = "abcdef\0ghijklmn";strncpy(str1,str2,3);str1[3] = '\0';printf("%s\n", str1);return 0;
}
打印:abc
再看:
#include<stdio.h>
#include<string.h>int main()
{char str1[30];char str2[30] = "abcdef\0ghijklmn";strncpy(str1,str2,10);//str1[3] = '\0';printf("%s\n", str1);return 0;
}
打印:abcdef
复制的过程中遇到\0,则停止了复制。复制的长度超过了\0,加上之前字符的长度,所以不用手动加上\0。
memcpy:可以复制任意内容,如字符串数组,整型,结构体,类等。它与strncpy的区别是遇到\0或其他结束符不会停止复制,一直复制到指定长度为止。
#include <stdio.h>
#include <string.h>int main()
{char str1[10];char str2[10] = "abc\0def";memcpy(str1,str2, 5);for (int i = 0; i < 5; i++){printf("%c\n",str1[i]);}return 0;
}
打印:a
b
c
d
中间有一个空格,代表\0对应的字符。这里不能用printf("%s\n",str1)来测试,因为中间有\0,是字符串结束符。
当复制的字符长度小于被复制字符串长度,这里的字符串长度包括的\0的长度,需要手动加上\0,等于则不必
#include<stdio.h>
#include <string.h>int main()
{char str[10];char str1[10];char str2[10] = "abcefg";memcpy(str1,str2,2);str1[2] = '\0';printf("str1=%s\n",str1);memcpy(str, str2, 7);printf("str=%s\n", str);return 0;
}
打印:str1=ab
str2=abcefg
memcpy不允许内存重叠,memmove允许内存重叠。
#include <stdio.h>
#include <string.h>int main()
{char a[10] = "abcdefg";memcpy(a + 1, a, 5);printf("%s\n", a);char b[10] = "abcdefg";memmove(b + 1, b, 5);printf("%s\n", b);return 0;
}
打印:
这是在linux上运行的结果,VS2013上memcpy竟然是正确的,不知为何。至于为何两个函数有不同的结果,网上搜它们的实现方法。
参考地址:http://blog.csdn.net/stpeace/article/details/61626795
strcpy,strncpy,memcpy,memmove相关推荐
- strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
strcpy和strncpy区别(2009-04-27 15:48:52) 转载标签:杂谈 分类:C++/C 第一种情况: char* p="how are you ?"; cha ...
- C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove
模拟实现字符串和内存操作函数(二)目录: strncpy strncat strncmp strcmp memcpy memmove strncpy char* strncpy(char* dst, ...
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove ================================ 1 strstr 字符 ...
- strcpy和memcpy的区别 | strcpy和strncpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy ...
- 《strcmp,strcpy,memcpy,memmove等函数模拟实现》
模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...
- strcpy()和memcpy()的区别
Strcpy和memcpy都可以用来拷贝字符串,strcpy以\0结束,但memcpy必须指定拷贝的长度,类似于strncpy Strncpy与memcpy类似,区别是:当遇到\0时,strncpy停 ...
- strcpy ,strncpy ,strlcpy地用法
strcpy ,strncpy ,strlcpy地用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...
- C语言中的复制函数(strcpy和memcpy)
strcpy和strncpy函数 这个不陌生,大一学C语言讲过,其一般形式为strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中去. EX: char str1[10]='',str ...
- c语言strcpy两字符串长度不同,C语言 strcpy和memcpy区别详细介绍
C语言 strcpy和memcpy区别详细介绍 PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的代码Time Limit Exceed难过)于是百度高效算法,本篇作为预 ...
最新文章
- 二.ubuntu14.04 3D特效设置
- 关于 iOS 10 中 ATS 的问题
- Python教程:作用域与嵌套函数
- 如何使用scss/sass
- Docker组队学习(一)
- 如何在Ruby中编写switch语句
- 安装慢_python安装第三方库太慢,很容易失败报错?教你如何提速
- Echarts地图的基本使用方法
- CSS颜色代码 颜色值 颜色名字大全
- python编程实战(三):暴力破解WIFI密码!亲测运行有效!
- 做自媒体赚钱,分享一个完整的影视剪辑的基本流程
- 跟上Java8 - 日期和时间实用技巧,转自知乎王爵nice
- 软件测试工程师未来十年的职业规划
- zabbix模板关联群组
- 如何利用python进行一次移动平均预测
- java各历史版本官网下载
- JavaWeb之Web核心(6)
- 位置关系C语言,C++/STL实现判断平面内两条线段的位置关系代码示例
- 打造自己的windows一键安装系统
- 如何成为一个合格的程序员
热门文章
- 【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )
- 702:Crossing River (贪心)
- 实时监听 input输入框值的变化 并响应动作
- maven工程导入eclipse后报错
- 关于WPS页面横向问题
- 不知道对象的传递那些参数
- DevExpress XtraTabControl 加载Form
- mongoDB的常用语法
- 在CNN上增加一层CAM告诉你CNN到底关注什么
- Yii::app()-request-getParam($name, $defaultValue)