C语言字符串处理库函数(部分)
sizeof和strlen的区别
1.sizeof是一个操作符,strlen是库函数。
2.sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0’的字符串作参数。
3.编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。(数组作为函数的参数退化为指针,是一种隐式转换)
strcpy、memcpy、sprintf
1、复制的内容不同。strcpy 只能复制字符串,而 memcpy 可以复制任意内容,例如字符数组、整型、结构体、类等。sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用 strcpy,而需要复制其他类型数据时则一般用memcpy。sprintf主要实现其他数据类型格式到字符串的转化。
4、执行效率不同。memcpy最高,strcpy次之,sprintf的效率最低。
strcpy&strncpy
1) 函数原型
char* strcpy(char* strDest, const char* strSrc) char* strncpy(char* strDest, const char* strSrc, int pos)
2) strcpy函数: 如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
strncpy函数:用来复制源字符串的前n个字符,src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置n个字符。
3) 如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上’\0’。
如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括’\0’。
如果指定长>目标长,运行时错误 。