[C/C++]几组使用区别 【memcpy strcpy】 【scanf gets】 【puts printf】【strlen sizeof】

时间:2020/8/13 17:35
整理了几个常用的易错点

地址加减运算

例如:指针+1表示指向下一个数据元素的首地址
p指向的是一个整型,p+1就是移动一个整型大小,即移动4个字节
p指向的是一个结构体,p+1就是移动一个结构体大小,即移动4个字节

memcpy的使用

  • void *memcpy(void *dest, void *src, unsigned int count);

参数使用:
目标首地址 +需要拷贝的首地址+ 长度

使用目的:
可以拷贝任意类型长度的数据到指定地址,例如解决了拷贝结构体信息到charp[] 上再进行IO操作

memcpy和strcpy的区别

复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串的第一个结束符"\0"才结束,如果空间不够,就会引起内存溢出。memcpy则是根据其第3个参数决定复制的长度。
用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy,由于字符串是以“\0”结尾的,所以对于在数据中包含“\0”的数据只能用memcpy

scanf(%s) 和 gets()的区别

gets()函数
接受任何开始的字符,以换行符结束,但会舍弃换行符用’\0’代替
可以用来输入带空格的字符串(接受空格)。
可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出
scanf()函数
会忽略行开头的所有的空格以空格、换行符、Tab结束输入,不会舍弃回车符,回车符残留在缓冲区,结尾自动加‘\0’
避免回车等问题
fflush(stdin)清空缓冲区

puts 和 printf(“%s”)的区别

①puts 和 printf 都遇到\0结束
②puts 将结尾的\0转换成\n并输出 (就是自动换行)printf不会

strlen和sizeof的区别

strlen是函数,要在运行的时候才能计算出来,参数必须是(char*)类型
用来计算字符串长度,遇到第一个\0结束,其实就是计算\0之前的字节

sizeof 是运算符 其值在编译时候已经计算好了,参数可以是数组、指针、类型、类对象、函数等
计算所占字节大小而与实际存储内容无关

结束语:凡心所向,素履所往,生如逆旅,一苇以航。
                大学时光不易,且行且珍惜。
               写博客只是想记录自己的学习旅程。
  文章如有不足和错误的地方,希望评论指出或私信
最后希望给文章点个赞,整理不易!!!
最后希望给文章点个赞,整理不易!!!
最后希望给文章点个赞,整理不易!!!

猜你喜欢

转载自blog.csdn.net/weixin_44972997/article/details/108009978