❤️强烈推荐人工智能学习网站❤️

这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相关推荐

  1. 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 ...

  2. C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove

    模拟实现字符串和内存操作函数(二)目录: strncpy strncat strncmp strcmp memcpy memmove strncpy char* strncpy(char* dst, ...

  3. 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove

    模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove ================================ 1 strstr 字符 ...

  4. strcpy和memcpy的区别 | strcpy和strncpy的区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy ...

  5. 《strcmp,strcpy,memcpy,memmove等函数模拟实现》

    模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...

  6. strcpy()和memcpy()的区别

    Strcpy和memcpy都可以用来拷贝字符串,strcpy以\0结束,但memcpy必须指定拷贝的长度,类似于strncpy Strncpy与memcpy类似,区别是:当遇到\0时,strncpy停 ...

  7. strcpy ,strncpy ,strlcpy地用法

    strcpy ,strncpy ,strlcpy地用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  8. C语言中的复制函数(strcpy和memcpy)

    strcpy和strncpy函数 这个不陌生,大一学C语言讲过,其一般形式为strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中去. EX: char str1[10]='',str ...

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

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

最新文章

  1. 二.ubuntu14.04 3D特效设置
  2. 关于 iOS 10 中 ATS 的问题
  3. Python教程:作用域与嵌套函数
  4. 如何使用scss/sass
  5. Docker组队学习(一)
  6. 如何在Ruby中编写switch语句
  7. 安装慢_python安装第三方库太慢,很容易失败报错?教你如何提速
  8. Echarts地图的基本使用方法
  9. CSS颜色代码 颜色值 颜色名字大全
  10. python编程实战(三):暴力破解WIFI密码!亲测运行有效!
  11. 做自媒体赚钱,分享一个完整的影视剪辑的基本流程
  12. 跟上Java8 - 日期和时间实用技巧,转自知乎王爵nice
  13. 软件测试工程师未来十年的职业规划
  14. zabbix模板关联群组
  15. 如何利用python进行一次移动平均预测
  16. java各历史版本官网下载
  17. JavaWeb之Web核心(6)
  18. 位置关系C语言,C++/STL实现判断平面内两条线段的位置关系代码示例
  19. 打造自己的windows一键安装系统
  20. 如何成为一个合格的程序员

热门文章

  1. 【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )
  2. 702:Crossing River (贪心)
  3. 实时监听 input输入框值的变化 并响应动作
  4. maven工程导入eclipse后报错
  5. 关于WPS页面横向问题
  6. 不知道对象的传递那些参数
  7. DevExpress XtraTabControl 加载Form
  8. mongoDB的常用语法
  9. 在CNN上增加一层CAM告诉你CNN到底关注什么
  10. Yii::app()-request-getParam($name, $defaultValue)