C/C++面试常见题目之字符串操作(一)

1,memcpy、memmove函数以及二者的区别
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
注意:.source和destin所指的内存区域可以重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针。

原型:void memmove( void dest, const void* src, size_t count ); //两次拷贝,原到目的,目的再拷回原
头文件:#include<string.h>;
功能:memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。由src所指内存区域复制count个字节到dest所指内存区域。

小结
他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。但memcpy的效率要比memmove的效率高。

2,strlen 和 sizeof 的区别
(1)sizeof是运算符,strlen是函数
(2)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的
(3)strlen 测量的是字符的实际长度,以’\0’ 结束。而sizeof 测量的是字符的分配大小。

(4)strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。
(5)sizeof 如果计算类型的大小时要加(),即sizeof(int);如果是变量名可以不加()
(6)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(7)当使用了于一个结构类型时或变量, sizeof 返回实际的大小,当使用一静态地空间数组, sizeof 归还全部数组的尺寸。
(8)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
(9)可以用sizeof(arr)/sizeof(arr[0])求数组元素的个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开缓缓归以

你的鼓励将是我创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值